1

最近、以下のような postgresql の関数を作成しました。

CREATE OR REPLACE FUNCTION POSTPRC(A IN NUMERIC)
**RETURNS VOID**
AS
$$
BEGIN
... ...
END;
$$ LANGUAGE PLPGSQL;

Javaを使用して呼び出すにはどうすればよいですか。以下のようなコードを使用しました。

CallableStatement upperProc = con.prepareCall("{ ? = call POSTPRC( ? ) }");
upperProc.registerOutParameter(1, Types.NULL);
upperProc.setInt(2,23);
int flag=upperProc.executeUpdate();

しかし、毎回エラーが発生します。どうすればこの問題を解決できますか?

例外は次のように表示されます: java.lang.ArrayIndexOutOfBoundsException: 2.

対応するパラメータを持つプロシージャ POSTPRC は、pgAdminIII ツールで正常に実行できます。



postgresql はステートメント likes-{? を使用する必要があります。= call procedure(?,?,?)} であり、これが Java を介して呼び出す唯一の方法です。{call procedure(?,?,?)} などのステートメントをテストしました。毎回失敗しました。実際には、postgresql のプロシージャは関数です。postgresql のプロシージャを呼び出したい場合は、パラメータまたは戻り値なしで postgresql のプロシージャを定義した方がよいでしょう....


どんなコメントでも大歓迎です!

ありがとう

4

1 に答える 1

2

?関数が値を返さない場合、なぜ最初のものが必要なのかよくわかりません。あなたもそれを書くことができます

CallableStatement upperProc = con.prepareCall("{call POSTPRC( ? ) }"); 

こちらをご覧ください

ちなみに、関数が値を返さない場合は、CallableStatements を使用する必要はありません。PreparedStatement を使用することもできますし、使用する必要もあります。

PreparedStatement pstmt = con.prepareStatement("SELECT * FROM POSTPRC( ? )")
pstmt.setInt(1,23);
pstmt.execute(); // omit the result
于 2013-01-07T03:41:38.713 に答える