【问题标题】:how to set serveroutput on using jdbc connection in Jmeter如何在 Jmeter 中使用 jdbc 连接设置 serveroutput
【发布时间】:2015-08-04 05:15:37
【问题描述】:

我正在尝试使用 JDBC 请求执行一段 PL/SQL 代码,如下所示

set serveroutput on; 
declare
..
BEGIN
DBMS_OUTPUT.ENABLE();
..
..
DBMS_OUTPUT.PUT_LINE(X);
END;

但我在响应中收到ORA-00922: missing or invalid option 错误。如果我删除set serveroutput on,SQL 块执行成功。但我在响应中没有得到任何值。

我尝试在 SQL Developer 中运行完全相同的 SQL 块,它确实向我显示了预期的值。

如何运行此代码块并获取要填充到 JMeter 中的值?

【问题讨论】:

    标签: oracle jdbc plsql jmeter


    【解决方案1】:

    set serveroutput on SQLPlus 特定命令。您必须在 PL/SQL 块执行后调用DBMS_OUTOUT.GET_LINES。

    【讨论】:

    • 我现在也试过了。声明变量 z(varchar2) 和 n(整数)。并添加了DBMS_OUTPUT.GET_LINE(z,n); 行。我现在如何从 z 中获取值?我需要再次使用 put_line 吗?
    • 您必须从 JDBC 调用此类匿名块 begin DBMS_OUTPUT.GET_LINE(:z,:n); end;,然后使用 System.out.println() 显示从 DBMS_OUTPUT 返回的行。或者,如果您在通过 JDBC 获取字符串数组时遇到问题,您可以在循环中使用 GET_LINE 函数。这就是 SQLDeveloper(和其他工具)在内部所做的。
    【解决方案2】:

    调整an old answer,您可以创建一个函数,让您将 dbms_output 缓冲区作为结果集 - 您可以更轻松地从 JMeter 处理:

    create or replace function get_lines
    return sys.odcivarchar2list pipelined is
      lines dbms_output.chararr;
      numlines integer;
    begin
      numlines := 999;
      dbms_output.get_lines(lines, numlines);
      if numlines > 0 then
        for i in 1..numlines loop
          pipe row (lines(i));
        end loop;
      end if;
    end;
    /
    

    执行你的块后,你可以查询:

    select * from table(get_lines);
    

    您可以阅读更多关于dbms_output.get_lines 工作原理in the documentation 的信息。正如@ibre5041 建议的那样,您可能可以直接从 Jmeter 调用它。或者可能有更好的替代方法来使用 dbms_output。

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2018-02-16
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2019-12-02
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多