使用 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);
调用 DBMS_OUTPUT.GET_LINES: 使用CallableStatement 调用 dbms_output.get_lines 并传入 PL/SQL 表作为输出参数:
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中文网其他相关文章!