問題タブ [callable-statement]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2814 参照

postgresql - PostgreSQL CallableStatement: オフセット 6 の不正な関数またはプロシージャ エスケープ構文

CallableStatement を使用して Postgres ストアド関数を呼び出す Java アプリケーションでエラーが発生しました。エラーは次のとおりです。

Postgres 9.2、posgresql-9.1-902.jdbc3.jar、および c3p0-0.9.2-pre4.jar 接続プールを使用していることに注意してください。

呼び出したいストアド関数は次のとおりです。

呼び出しを行う Java メソッド:

スーパークラスからのいくつかのグローバル変数

DAO:

なぜこれが起こっているのか、私には考えがありません。refcursor を返す Postgres Stored Function から結果を正常に取得できましたが、その関数/関数呼び出しとこれとの違いを理解できないようです。

どんなアイデアでも大歓迎です

0 投票する
0 に答える
1604 参照

java - CallableStatement、名前付きパラメーター、バインディングの順序

名前付きパラメーターを使用して SQL クエリを実行するために CallableStatement を使用していますが、パラメーターをバインドする順序によって異なる結果が得られます。これが私の完全なテストです:

col_a に "b" が含まれ、col_b に "a" が含まれているため、失敗します。stmt.setObject変数がクエリに表示される順序で2 つの呼び出しを切り替えると、機能します。

私も試しました:

  • setObject/getObject の代わりに setString/getString を使用する
  • インデックスによる列の参照 ( resultSet.getObject(1)col_a および2col_b の場合)
  • 両方を組み合わせる:resultSet.getString(resultSet.findColumn("col_a"))

私が間違っていること、またはこれを行うことができる他の方法について何か考えはありますか? ?同じパラメーターを使用して異なるクエリを異なる順序で取得できるため、PreparedStatement の位置付けパラメーター (with ) を使用することはできません。

たとえば、次の 2 つのクエリを実行することができます。

  • select nvl(foo, :a), :b || something from my_table
  • select decode(:b, 'b', aaa, ccc), eee || :a from another_table

:aこれらのステートメントには、変数およびの存在以外に共通点はありません:b。しかし、それらは同じ順序ではありません。つまり、最初のものでは機能しますが、2 番目のものでは機能しないため、それらを に置き換えて?から、変数をバインドする PreparedStatement を使用することはできませんstmt.setObject(1, a); stmt.setObject(2, b);

参考までに、私は ojdbc6-11.2.0.2.0 を使用しており、データベースも 11.2.0.2.0 にあります。

0 投票する
1 に答える
1684 参照

java - PL/SQL:テーブルの列の値を配列またはVARRAYに挿入してJavaからアクセスしますか?

テーブルの特定の列から値を取得し、それらを配列に配置する必要があります。PL/SQL ストアド プロシージャを使用してから、Java でプロシージャを呼び出し、次のようなものを使用することを考えています。

私は次のようなものを使用することを考えていました:

ストアドプロシージャでしかし、それはうまくいきませんでした

0 投票する
1 に答える
2387 参照

java - Apache DBUtils を使用したスト​​アド プロシージャの呼び出し

DBUtils を使用して呼び出し可能なステートメントを呼び出す方法がわかりません

すべてのフィールドが入力であり、どのフィールドがすべて出力であるかをどのように指定できますか?

0 投票する
0 に答える
428 参照

mysql - ストアド関数の戻り値を取得しようとしたときのパラメータ インデックスが範囲外でした

いくつかのパラメーターを取り、アプリケーションに返される一意の varchar ID を生成する関数があります。Java アプリケーションから関数を呼び出すと実行されますが (データが挿入されます)、outparam を取得しようとすると SQL 例外がスローされます

パラメータ インデックスが範囲外です (1 > パラメータ数、0)。

ジャバコード:

Navicat を使用して MySQL を操作しています。プロシージャは Navicat で実行され、正しい戻り値が表示されます。ただし、Java アプリから tmt.getString(1) を呼び出すと、上記の例外がスローされます。

助けてください。ありがとうございました。

0 投票する
1 に答える
496 参照

java - *をパラメーターとして渡すときに時間がかかる呼び出し可能ステートメント

次のコードがあります。「firstnamelastname」のような通常の文字列を渡すとき。ストアドプロシージャはすぐに戻ります。でも、名*で呼ぶと時間がかかります。名*を使用してストアドプロシージャを実行すると、2秒以上かかりません。これが以下のコードです

0 投票する
0 に答える
900 参照

jdbc - 別のステートメントを実行するために、あるステートメントの ResultSet をフォーマット文字列パラメーターとして使用する代わりの方法はありますか

PostgreSQL 9.2、jdbc4、および DBMS は PgAdmin3 経由です。

ストアド関数を持つ呼び出し可能なオブジェクトであるステートメントオブジェクトを使用して結果セットを取得し、それらの結果セットの型を比較して型を処理する必要があります。それらを処理した後、それらのいくつかを別のステートメントのフォーマット文字列引数として設定したいと考えています。

これは、私が達成したいことの一種の疑似コードです。基本的に、バッチに繰り返し追加してから、セーブポイントまたはロールバックを使用してバッチ更新を行い、そのバッチを実行した後にそれらの変更をコミットしたいと考えています。

さらに、ストアド プロシージャには、jdbc 関連の構文の文字列としていくつかの postgres があります。IS NULL の使用、引用符のエスケープ、セミコロンの要求などについては、私にはわかりません。

この場合、準備されたステートメント、呼び出し可能なステートメント、またはステートメントを組み合わせて一致させることは可能ですか?

そのステートメントを実行するまでは、ステートメントごとに 1 つの結果セットしか開くことができないことはわかっていますが、結果セットの型オブジェクト (つまり、getXXX を何らかのデータ型として保存) を保持して、別のステートメントを閉じた場合に使用するにはどうすればよいでしょうか?

これは、最初に select を使用してデータを取得し、次に 3 回更新するアプリケーション用です。3つすべてが、データベースの行を反復処理するさまざまなパラメーターを使用したバッチ更新であり、すべての更新後にコミットを伴う個別のトランザクションで行われます。各更新は個別の機能になります。

私はもともと、1 つのステートメントの結果セットを使用してから、updateXXX と updateRow を使用することを考えていましたが、効率については完全にはわかりません。

0 投票する
2 に答える
3036 参照

java - 出力パラメータを読み取った後、結果セットを取得できません

私はJavaを使用してmssql2012DBにアクセスしています

パラメータに1つだけ(たとえば@ p1という名前)を取り、単一の結果セットを返すストアドプロシージャ「procX」があります。結果セットを取得する前に戻り値を読み取ろうとしない限り、正常に機能します。コードは以下のとおりです。「//」を削除して戻り値を取得するnullと、結果として取得されます。

また、結果セットを取得した後で戻り値を読み取った場合でも、これにより結果セットが閉じられます。

結果セットを取得できなくても戻り値を読み取る方法はありますか?

そして、私が見る限り、この状況は戻り値に制限されておらず、他の出力パラメーターでも発生します。

0 投票する
1 に答える
1563 参照

java - CallableStatement + 同じテーブルから選択された新しい行を挿入するプロシージャは、新しい PK を返します

同じテーブルから選択された行のコピーであるテーブルに新しい行を挿入しようとしています。テーブルからIDに基づいて行を選択し、いくつかの新しい値で同じテーブルに挿入するプロシージャを作成しました。このプロシージャは、新しい行の PK も返します。

CallableStatement を実行すると、以下の例外が発生します。

エラーを見つけることができません

Commond が適切に終了していない

私の手順では

参考までにマイコード。ヘルプやヒントをいただければ幸いです。ありがとうございました。

0 投票する
1 に答える
7112 参照

oracle - CallableStatement.getResultSet() は、Oracle 関数を呼び出すときに常に null を返します。

次のコードを実行しています。

関数は次のように宣言されます。

ドキュメントによると、結果がある場合、cs.execute() は true を返し、cs.getResultSet() は値を持ちます。ただし、これは私が得る出力です:

Oracle Express 11.2.0 と最新のドライバーを使用しています。

ヒント/説明/試してみることは大歓迎です。

ありがとう!