JDBC を使用した DBMS_OUTPUT 行の抽出
dbms_output.get_lines プロシージャを使用すると、JDBC を使用して Java アプリケーション内で実行される Oracle プロシージャから出力を取得できます。データベース オブジェクトを作成せずにこれを実現するには、次の手順を検討してください。
コード例:
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 サイトの他の関連記事を参照してください。