首页 > 数据库 > mysql教程 > 如何使用 JDBC 检索 Oracle 的 DBMS_OUTPUT?

如何使用 JDBC 检索 Oracle 的 DBMS_OUTPUT?

Linda Hamilton
发布: 2025-01-04 04:35:39
原创
920 人浏览过

How to Retrieve Oracle's DBMS_OUTPUT Using JDBC?

使用 JDBC 检索 DBMS_OUTPUT.get_lines

在 Java 应用程序中使用 Oracle 的 dbms_output.get_lines 时,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 库,您可以通过在“设置”中启用它来自动检索服务器输出以进行查询object:

DSLContext ctx = DSL.using(c, 
    new Settings().withFetchServerOutputSize(10));
登录后复制

查询执行后,服务器输出将在 ExecuteContext::serverOutput 中可用。

注意 DBMS_OUTPUT.GET_LINE

虽然 DBMS_OUTPUT.GET_LINE 单独检索行,但与使用 DBMS_OUTPUT.GET_LINE 相比,基准测试显示速度显着减慢DBMS_OUTPUT.GET_LINES,即使在 PL/SQL 中也是如此。因此,为了提高效率,建议使用 DBMS_OUTPUT.GET_LINES 的批量方法。

以上是如何使用 JDBC 检索 Oracle 的 DBMS_OUTPUT?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板