JMeter-如何通过JDBC请求调用Oracle函数

时间:2019-01-11 16:36:36

标签: oracle jdbc jmeter

我正在使用JMeter测试一些Oracle功能和过程。我想使用JDBC request采样器调用函数(不是存储过程)。我要调用的函数是特定的,因为它内部包含一个DML操作(执行插入操作),所以我无法将其放入select语句,因为它会导致ORA-14551 - cannot perform a DML operation inside a query错误。

因此,尝试使用查询类型可调用语句执行JDBC请求:

BEGIN

  {call MY_PACKAGE.MY_FUNCTION(?,?)};

END;

{call MY_PACKAGE.MY_FUNCTION(?,?)};

enter image description here

!编辑!

添加屏幕截图以显示功能不能以这种方式调用: enter image description here

或选择语句:

select MY_PACKAGE.MY_FUNCTION(?,?) from dual

将不起作用(分别返回PLS-00221ORA-14551)。现在,我知道如何通过JSR223 Sampler(例如Groovy脚本)处理这种函数,但是问题是可以通过JDBC Request完成(结果是将函数的输出存储到jmeter变量中)吗?

出于测试目的,我正在调用的函数在程序包中定义为:

create or replace package my_package
is
    function my_function(par1 varchar2, par2 varchar2) return varchar2;
end my_package;

create or replace package body my_package
is

    function my_function(par1 varchar2, par2 varchar2) return varchar2
    is

    begin    
        return 'Test_Output';
    end my_function;

end my_package;

2 个答案:

答案 0 :(得分:0)

对查询使用查询类型Callable Statement

{call MY_PACKAGE.MY_FUNCTION(?,?)}
  

通常不需要使用{和}来包含Callable语句;但是,如果数据库使用非标准语法,则可以使用它们。

答案 1 :(得分:0)

尝试一下:

declare
  c varchar2(500);
begin
  c := your.function(?, ?);
  select c into ? from dual; --this is to return the value to JMeter
end;

参数值:TEST,TEST,OUT
参数类型:VARCHAR,VARCHAR,OUT VARCHAR

实际上并不需要其他变量名,但是如果稍后在测试计划中使用它们,则可以进行设置。

这可能也可行(我没有测试):

? := your.function(?, ?);

(注意:out参数现在是第一个,与上面的不同,它是最后一个-在JMeter配置中调整参数值和类型)