0

postgresqlのドキュメントから私はそれを見つけました:

con.setAutoCommit(false);

プロシージャコール。

CallableStatement proc = con.prepareCall("{ ? = call doquery ( ? ) }");
proc.registerOutParameter(1, Types.Other);
proc.setInt(2, -1);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);

ここを参照してください

一方、私は次のようなプロシージャを作成しようとしました

CREATE OR REPLACE FUNCTION PSSQLPRC(pA IN VARCHAR,pB IN NUMERIC,PC OUT NUMERIC)
RETURNS NUMERIC
AS $$<br> begin

... ... 
end;
$$ Language PLPGSQL;

javaを使用してpostgresqlプロシージャを呼び出すには、以下のようにします。

CallableStatement proc = con.prepareCall("{ ? = call PSSQLPRC(?,?,?) }");
proc.registerOutParameter(1, Types.NUMERIC);
proc.setString(2,"abc");
proc.setInt(3,10);
proc.registerOutParameter(4, Types.NUMERIC);
proc.execute();

CallableStatementのオブジェクトを実行すると、エラーが発生します。エラーを解決するにはどうすればよいですか?上記の記述は正しいですか?

4

1 に答える 1

0

ストアド プロシージャからの 2 つの戻り値が本当に必要ですか? そうでない場合は、関数を次のように変更してみてください。

CREATE OR REPLACE FUNCTION PSSQLPRC(pA IN VARCHAR,pB IN NUMERIC)
RETURNS NUMERIC

そしてJavaコード:

CallableStatement proc = con.prepareCall("{ ? = call PSSQLPRC(?,?) }");
proc.registerOutParameter(1, Types.NUMERIC);
proc.setString(2,"abc");
proc.setInt(3,10);
proc.execute();
于 2013-01-05T14:04:33.780 に答える