我正在使用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(?,?)};
!编辑!
或选择语句:
select MY_PACKAGE.MY_FUNCTION(?,?) from dual
将不起作用(分别返回PLS-00221
和ORA-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;
答案 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配置中调整参数值和类型)