JMeter:如何在Oracle 12C中处理隐式结果? ORA-20999:Oracle错误:: ORA-29478:隐式结果无法通过此语句返回

时间:2019-01-14 14:29:29

标签: oracle jmeter

在Oracle数据库中通过JMeter调用存储过程时,出现以下错误:
sudo apt install gconf

我没有10个声誉,因此无法发布图片。我将描述配置。

这是我的JDBC连接信息:

ORA-20999: Oracle ERROR:: ORA-29478: Implicit result cannot be returned through this statement

这是我的JDBC Request Sampler信息:

Max Number of Connections:0  
Max Wait (ms):10000  
Time Between Eviction Runs (ms): 60000  
Auto Commit: True  
Transaction Isolation:TRANSACTION_READ_COMMITTED  
Test While Idle: True  
Soft Min Evictable Idle Time (ms): 5000  
Validation Query: select 1 from dual  
JDBC Driver Class: oracle.jdbc.OracleDriver  

这是我得到的错误:

Query Type: Callable Statement  
Procedure: call office_hierarchy() 

我特意用XXXX替换了用户。

我正在设置一个JMeter测试脚本,在其中我在Oracle数据库中调用存储过程。 Oracle数据库的版本为12C。我使用Oracle网站上的最新版本ojdbc8.jar。我也从Oracle网站尝试过ojdbc6.jar和ojdbc7.jar。我的Jmeter在5.0 r1840935上。我的Java版本是1.8.0_191。

我已经确认可以建立数据库连接,因为可以进行选择查询而不会出现问题。

隐式结果(或隐式游标)已在Oracle 12c中引入。到目前为止,有人遇到过这个问题吗?我应该以调用存储过程的方式进行更改吗?还是这仍然是驱动程序问题?还是JMeter尚不支持此功能?

3 个答案:

答案 0 :(得分:2)

经过一番挖掘,我发现这不是驱动程序问题。实际上是另外一回事。我使用了错误的语法来调用存储过程。

所以我的原始语法是:

call _stored_procedure_()  
call office_hierarchy()

但是,正确的语法是:

BEGIN  
_stored_procedure_();  
END;  

BEGIN  
office_hierarchy();  
END;  

这将解决此问题,JMeter现在返回结果集,而没有任何问题。

感谢大家的帮助。根据网站规则,我将在48小时后接受所有者的答复。当然总是欢迎其他意见!

答案 1 :(得分:0)

  1. 您需要下载ojdbc7.jar for Oracle 12c并将其放入JMeter Classpath。删除所有以前的JDBC驱动程序,然后重新启动JMeter
  2. 确保在JDBC Request采样器中使用Callable Statement作为查询类型

    enter image description here

  3. 您还需要更改"Validation query" to select 1 from dual in the JDBC Connection Configuration

    enter image description here

答案 2 :(得分:0)

好像您仍在使用11g版本的ojdbc驱动程序。
检查user.classpath中的JMETER_HOME/bin/user.properties属性值,以确保您正确使用JMETER_HOME/lib中的Oracle 12c的ojdbc7.jar版本