JDBC を使用した DBMS_OUTPUT.get_lines の取得
Java アプリケーション内で Oracle の dbms_output.get_lines を利用する場合、JDBC は、JDBC を使用せずに出力を取得する手段を提供します。追加のデータベース オブジェクトを作成します。このアプローチには、一連の手順が含まれます:
このプロセスを示すサンプル コード スニペットは次のとおりです。
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 サイトの他の関連記事を参照してください。