我正在将应用程序从 Oracle 迁移到 EDB,并且在包中的存储过程方面遇到了一些问题。
假设我定义了这种类型:
CREATE TYPE public.obj_test AS
(
version_in character varying(5),
sessionid_in character varying(40)
);
我创建了这个程序:
CREATE OR REPLACE PACKAGE public.pkgtest
IS
PROCEDURE test_proc(param1 public.obj_test, OUT param2 mad.obj_test);
END pkgtest;
CREATE OR REPLACE PACKAGE BODY public.pkgtest
IS
PROCEDURE test_proc(param1 public.obj_test, OUT param2 public.obj_test) IS
BEGIN
param2 := public.OBJ_TEST('1', '2');
END;
END pkgtest;
在我的 java 应用程序中,我正确地创建了连接,例如:
public class MyObj {
protected String version;
protected String sessionId;
@Override
public String toString() {
return "MyObj{" +
"version='" + version + '\'' +
", sessionId='" + sessionId + '\'' +
'}';
}
}
String url = "jdbc:postgresql://x.x.x.x/public";
Properties props = new Properties();
props.setProperty("user","myuser");
props.setProperty("password","mypassword");
Connection conn = DriverManager.getConnection(url, props);
CallableStatement ps3 = conn.prepareCall("CALL public.pkgtest.test_proc(?,?)");
MyObj rq = new MyObj();
MyObj rs = new MyObj();
String abc = null;
ps3.setObject(1, rq, Types.OTHER);
ps3.setObject(2, rs, Types.OTHER);
ResultSet rsSet = ps3.executeQuery();
while (rsSet.next()) {
System.out.println(rsSet.getObject(1));
}
但是,正在抛出异常。我尝试了一些类型,如 JAVA_OBJECT、STRUCT、OTHER,......我只是想将我的 java 对象作为参数传递,并接收另一个 java 对象作为“回复”。
在我的真实情况下,两个参数都是不同的类。
我做错了什么?
编辑:我忘了说,是语言 edbspl