Oracle 如何在Jmeter中使用jdbc连接设置serveroutput

Oracle 如何在Jmeter中使用jdbc连接设置serveroutput,oracle,jdbc,plsql,jmeter,Oracle,Jdbc,Plsql,Jmeter,我尝试使用JDBC请求执行PL/SQL代码块,如下所示 set serveroutput on; declare .. BEGIN DBMS_OUTPUT.ENABLE(); .. .. DBMS_OUTPUT.PUT_LINE(X); END; 但是我在响应中得到错误,如ORA-00922:缺少或无效选项。如果我删除上的设置serveroutput,则SQL块将成功执行。但我没有得到任何价值的回应 我尝试在SQLDeveloper中运行完全相同的SQL块,它确实显示了预期的值 如何运行此代

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

set serveroutput on; 
declare
..
BEGIN
DBMS_OUTPUT.ENABLE();
..
..
DBMS_OUTPUT.PUT_LINE(X);
END;
但是我在响应中得到错误,如
ORA-00922:缺少或无效选项。如果我删除
上的
设置serveroutput,则SQL块将成功执行。但我没有得到任何价值的回应

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


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

SQLPlus特定命令上设置serveroutput。您必须在PL/SQL块执行后调用。

调整后,您可以创建一个函数,让您获得dbms_输出缓冲区作为结果集-这可能更容易从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\u输出。获取行的工作原理的信息。正如@ibre5041所建议的,您可以直接从Jmeter调用它。或者,除了使用dbms_输出,可能还有更好的选择。

我现在也尝试了同样的方法。声明的变量z(varchar2)和n(整数)。并添加了行
DBMS_输出。获取_行(z,n)。现在如何从z中获取值?我需要再次使用put_行吗?您必须调用这样的匿名块
begindbms_OUTPUT.GET_行(:z,:n);结束GET_LINE
函数。这就是SQLDeveloper(和其他工具)在内部所做的。