打开参数 behavior_compat_options='proc_outparam_override'后,JDBC 调用事先创建的
存储过程,步骤如下:
步骤 1 调用 Connection 的 prepareCall 方法创建调用语句对象。
Connection conn = DriverManager.getConnection("url","user","password"); CallableStatement
cs = conn.prepareCall("{ CALL TEST_PROC(?,?,?) }");
步骤 2 调用 CallableStatement 的 setInt 方法设置参数。
PGobject pGobject = new PGobject();
pGobject.setType("public.compfoo"); // 设置复合类型名,格式为“
schema.typename”。
pGobject.setValue("(1,demo)"); // 绑定复合类型值,格式为“
(value1,value2)”。
cs.setObject(1,
pGobject);
步骤 3 调用 CallableStatement 的 registerOutParameter 方法注册输出参数。
// 注册 out 类型的参数,类型为复合类型,格式为“
schema.typename”。
cs.registerOutParameter(2, Types.STRUCT, "public.compfoo");
步骤 4 调用 CallableStatement 的 execute 执行方法调用。
cs.execute();
步骤 5 调用 CallableStatement 的 getObject 方法获取输出参数。
PGobject result = (PGobject)cs.getObject(2); // 获取 out 参数
result.getValue(); // 获取复合类型字符串形式值。
result.getArrayValue(); //获取复合类型数组形式值,以复合数据类型字段顺序排序。
result.getStruct(); //获取复合类型子类型名,按创建顺序排序。
步骤 6 调用 CallableStatement 的 close 方法关闭调用语句。
cs.close();
// 在数据库创建复合数据类型。
CREATE TYPE compfoo AS (f1 int, f3 text);
// 在数据库中已创建了如下存储过程,它带有 out 参数。
create or replace procedure test_proc (
psv_in in compfoo, psv_out out compfoo
)
as begin
psv_out := psv_in; end;




