2016-11-09 5 views
1

GP 4.3.7で以下の手順を作成しました。レコードを返すときにregisterOutParameter()に設定するデータ型は何ですか?

CREATE OR REPLACE FUNCTION test.mytest(param varchar) 
RETURNS SETOF record 
LANGUAGE sql 
AS 
$body$ 
SELECT * from test.mytable; 
$body$ 
VOLATILE; 

私はJavaコード次のレジスタの出力paramは時に設定する必要がありますどのようなデータ型:

CallableStatement cstmt = conn.prepareCall("{call test.mytest(?, ?)}"); 
cstmt.setString(1, "abc"); 
cstmt.registerOutParameter(2, Types.VARCHAR); 
cstmt.execute(); 

私は()のregisterOutParameterでのparamとして多くのデータタイプを試してみました。しかし、私は常に受信例外:

AのCallableStatementをパラメータ

の無効な数で実行されたが、誰もが私にいくつかのアドバイスを与えることができますがありますか?

ありがとうございました!

+0

関数は複数の値または複数の行を返すことができると思いますか?さらに、1つのパラメータ 'param'でFunctionを宣言しましたが、2つのパラメータで呼び出しています。最後にキーワード 'Call'を使って関数を呼び出すことはできません。ストアドプロシージャを参照していますか? – Viki888

答えて

2

https://jdbc.postgresql.org/documentation/91/callproc.html#callproc-resultset-setof

「セットとしてデータを返す関数のCallableStatementインターフェースを介して呼び出されるべきではなく、その代わりに、通常のステートメントまたはPreparedStatementのインターフェイスを使用する必要があります。」

Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("select * from test.mytest(1, 'abc')"); 
while (rs.next()) 
{ 
    //do something here 
} 
rs.close(); 
stmt.close(); 
関連する問題