JDBC を使用した Oracle の DBMS_OUTPUT.GET_LINES からの出力の取得
JDBC は、Oracle の dbms_output.get_lines プロシージャによって生成された出力に、作成せずにアクセスする手段を提供します。データベース内の追加オブジェクト。これを実現する方法は次のとおりです:
サーバー出力バッファリングを有効にする: 出力にアクセスする前に、現在の接続でバッファリングを有効にしてサーバー出力をキャプチャします:
dbms_output.enable();
出力を PL/SQL に保存表: サーバー出力を取得するには、PL/SQL で表を作成して出力を保存します:
create type DBMSOUTPUT_LINESARRAY as table of varchar2(255);
Call DBMS_OUTPUT.GET_LINES: を使用します。 dbms_output.get_lines を呼び出し、PL/SQL 表を out として渡す CallableStatementパラメータ:
CallableStatement call = c.prepareCall( "declare \n" + " num integer := 1000;\n" // Adjust this value as needed + "begin \n" + " dbms_output.get_lines(?, num);\n" + " dbms_output.disable();\n" + "end;\n" ); call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
サーバー出力バッファリングを無効にする: 出力を取得した後、潜在的なバッファ オーバーフローを防ぐためにバッファリングを無効にします:
dbms_output.disable();
コード例: プロセスを示すコード スニペットは次のとおりです:
try (CallableStatement call = c.prepareCall( "declare \n" + " num integer := 1000;\n" + "begin \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 = null; try { array = call.getArray(1); System.out.println(Arrays.asList((Object[]) array.getArray())); } finally { if (array != null) array.free(); } }
このアプローチは Oracle 12c 以降で機能することに注意してください。 Oracle 11g では、補助 SQL TABLE タイプの使用が必要になる場合があります。
以上がJDBC を使用して Oracle から DBMS_OUTPUT を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。