0

我正在将应用程序从 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

4

0 回答 0