PostgreSQL から setof refcursor を返すプロシージャにアクセスする必要があります。
最初のオブジェクトにはアクセスできますが、残りのオブジェクトではなく残りのオブジェクトにはアクセスできません。
con.setAutoCommit(false);
try (CallableStatement proc =
con.prepareCall("{ ? = call usp_sel_article_initialdata_new1() }")) {
proc.registerOutParameter(1, Types.OTHER);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);
while (results.next()) {
System.out.println("Result Id" + results.getString(1));
System.out.println("Results Name" + results.getString(2));
}
これにより、最初の refcursor 値が得られますが、2 番目の refcursor を使用しようとすると、次の行を使用してエラーが発生します。
proc.registerOutParameter(2, Types.OTHER);
エラーが発生しています。また試しました:
proc.registerOutParameter(1, Types.REF);
これも機能しません。手順の例は次のとおりです。
CREATE OR REPLACE FUNCTION usp_sel_article_initialdata_new1()
RETURNS SETOF refcursor AS
$BODY$
Declare swv_refcur refcursor;
swv_refcur2 refcursor;
DECLARE r record;
BEGIN
open SWV_RefCur for Select OM.opID as ID,OM.OperatorName as Name from operator
AS OM (OPid bigint,OperatorName character varying(100),status boolean)
where OM.status = true
order By OperatorName;
return next SWV_RefCur;
open SWV_RefCur2 for Select CC.cirid as ID,CC.cirnm as Name from circle
AS CC (cirid bigint,cirnm character varying(100),status boolean)
where Status = true and cirid not in(28,31)
order by cirnm;
return next SWV_RefCur2;
2 番目のオブジェクトにアクセスする方法を教えてください。