1

postgresデータベースにストアドプロシージャがあります。postgres JDBCドライバーを使用してストアドプロシージャを実行していますが、戻り値のタイプを気にせず、クエリを実行できません。関数名の近くに構文エラーがあることを示しています。

行を返すプロシージャでは、PreparedStatementを介してこれを実行し、次のようなパラメータを設定することができました。

PreparedStatement prepared = connection.prepareStatement("SELECT * FROM NonQueryProcedure(?)");
prepared.setInt(1, 999);
// ....
ResulSet resultSet = prepared.executeQuery();

ただし、戻り値のタイプを気にしない「更新」ストアドプロシージャでは、これを機能させることができないようです。connection.prepareStatement()とprepareCall()を使用してみましたが、statement.execute()、. executeUpdate()、および.executeQuery()を使用して実行しようとしましたが、成功しませんでした。

戻り値のタイプを気にしないストアドプロシージャを実行するにはどうすればよいですか?

4

2 に答える 2

0

実際の構文エラーがなければ、はっきりとは言えませんが、これを試してください。

"SELECT * FROM \"getData\"(?)"

CamelCase / PascalCaseは、どのSQLデータベースでも悪い考えです。単一のケースに折りたたんで表示されるのはAMASSOFUNREADABLELETTERSだけであるか、引用符が必要であり、構文エラーを回避したい場合はいつでも「aMassofLettersAndQuotesAndShiftKeysAndMyFingersHurt」と入力する必要があります。

于 2013-01-11T16:50:52.507 に答える
0

PostgreSQLには「実際の」プロシージャがないため、関数は次のSELECTステートメントを使用して実行されます。

statement.execute("select NonQueryProcedure(?)");

performPL / pgSQL関数内では、ステートメントを使用してそのような関数を呼び出すことができることに注意してください。ただし、これはPL/pgSQLブロックの外部では使用できません。

于 2013-01-14T13:21:28.797 に答える