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

JDBC を使用して Oracle の DBMS_OUTPUT を取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-04 04:35:39
オリジナル
907 人が閲覧しました

How to Retrieve Oracle's DBMS_OUTPUT Using JDBC?

JDBC を使用した DBMS_OUTPUT.get_lines の取得

Java アプリケーション内で Oracle の dbms_output.get_lines を利用する場合、JDBC は、JDBC を使用せずに出力を取得する手段を提供します。追加のデータベース オブジェクトを作成します。このアプローチには、一連の手順が含まれます:

  1. サーバー出力バッファリングを有効にする: dbms_output.enable() を使用して、サーバー出力バッファリングを有効にします。
  2. 生成出力: 出力を生成するストアド プロシージャまたはスクリプトを実行します。
  3. DBMS_OUTPUT.get_lines を使用して出力をフェッチします: CallableStatement インターフェイスを使用して、dbms_output.get_lines を呼び出すプロシージャを実行し、Array オブジェクトを出力パラメータとして登録します。
  4. サーバー出力バッファリングを無効にする: を呼び出しますdbms_output.disable() を使用してバッファ オーバーフローを防ぎます。

このプロセスを示すサンプル コード スニペットは次のとおりです。

try (CallableStatement call = c.prepareCall(
    "declare "
  + "  num integer := 1000;" // Adapt this as needed
  + "begin "
  + "  dbms_output.enable();"
  + "  dbms_output.put_line('abc');"
  + "  dbms_output.put_line('hello');"
  + "  dbms_output.put_line('so cool');"

  // This captures the output up until now through a PL/SQL TABLE type.
  // Oracle 12c+ uses a SQL cursor, while 11g requires an auxiliary SQL TABLE
  + "  dbms_output.get_lines(?, num);"

  // Disable buffering
  + "  dbms_output.disable();"
  + "end;"
)) {
    call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
    call.execute();

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

jOOQ の使用

jOOQ ライブラリを使用している場合は、それを有効にすることでクエリのサーバー出力を自動的に取得できます。設定オブジェクト:

DSLContext ctx = DSL.using(c, 
    new Settings().withFetchServerOutputSize(10));
ログイン後にコピー

サーバー出力は、クエリ実行後に ExecuteContext::serverOutput で利用可能になります。

DBMS_OUTPUT.GET_LINE に対する注意

DBMS_OUTPUT.GET_LINE は行を個別に取得しますが、ベンチマークでは、DBMS_OUTPUT.GET_LINE と比べて大幅な速度の低下が示されています。 PL/SQL であっても DBMS_OUTPUT.GET_LINES を使用する必要があります。したがって、効率を高めるために DBMS_OUTPUT.GET_LINES を利用する一括アプローチをお勧めします。

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

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