ホームページ > データベース > mysql チュートリアル > JDBC を使用して Oracle プロシージャから DBMS_OUTPUT 行を取得するにはどうすればよいですか?

JDBC を使用して Oracle プロシージャから DBMS_OUTPUT 行を取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-03 00:00:40
オリジナル
628 人が閲覧しました

How Can I Retrieve DBMS_OUTPUT Lines from Oracle Procedures Using JDBC?

JDBC を使用した DBMS_OUTPUT 行の抽出

dbms_output.get_lines プロシージャを使用すると、JDBC を使用して Java アプリケーション内で実行される Oracle プロシージャから出力を取得できます。データベース オブジェクトを作成せずにこれを実現するには、次の手順を検討してください。

  1. サーバー出力バッファリングを有効にする: dbms_output.enable() を使用して、サーバー出力のバッファリングをアクティブにします。
  2. バッファーの設定: dbms_output.put_line() を呼び出して、出力行をバッファー内に保存します。
  3. バッファーされた行の取得 JDBC: CallableStatement を使用して、dbms_output.get_lines を呼び出し、取得した行を配列として登録する動的クエリを実行します。
  4. 出力バッファリングを無効にする: 実行dbms_output.disable() を使用してバッファ オーバーフローを回避します。

コード例:

try (CallableStatement call = c.prepareCall(
  "declare \n"
  + "  num integer := 1000;\n" // Adjust value as needed
  + "begin \n"
  + "  dbms_output.enable();\n"
  + "  dbms_output.put_line('abc');\n"
  + "  dbms_output.put_line('hello');\n"
  + "  dbms_output.put_line('so cool');\n"
  + "  dbms_output.get_lines(?, num);\n"
  + "  dbms_output.disable();\n"
  + "end;\n"
)) {
  call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
  call.execute();

  Array array = call.getArray(1);
  System.out.println(Arrays.asList((Object[]) array.getArray()));
}
ログイン後にコピー

出力:

[abc, hello, so cool, null]
ログイン後にコピー

出力バッファを有効または無効にすると、接続全体に影響することに注意してください。したがって、複数の JDBC ステートメントにまたがる出力をキャプチャできます。

注: このアプローチでは、デフォルトで最大 1000 行が取得されます。 PL/SQL でループするか、データベースをポーリングして追加の行を取得することを検討してください。

jOOQ の使用:

jOOQ ユーザーは、FetchServerOutputListener:

を有効にすることでサーバー出力を自動的にフェッチできます。
DSLContext ctx = DSL.using(c, 
  new Settings().withFetchServerOutputSize(10));
ログイン後にコピー

このアクションは、FetchServerOutputListener に出力を記録し、 ExecuteContext::serverOutput.

でサーバー出力をキャプチャします。

以上がJDBC を使用して Oracle プロシージャから DBMS_OUTPUT 行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート