问题描述
我想使用 jmeter 测试一个 Oracle 存储过程.我已经完成了除参数之外的所有工作.
I want to test an Oracle Stored Procedure by using jmeter.I have done everything but parameters.
这是我的 SQL 查询:
And here is my SQL Query:
声明outinfo varchar2(20);outtable sys_refcursor;开始{调用 RK_JSCX(?,?)};结束;
Oracle 中的 outtable 是一个游标.我使用 resultSet 将它包含在 java 中.但是,无论我在参数类型中设置什么,它都表示无效类型.
The outtable in Oracle is a cursor.And i used resultSet to contain it in java.However,whatever i set in parameter types ,it said invalid type.
样品开始时间:2012-10-25 16:06:41 CST加载时间:0延迟:0大小(以字节为单位):25标头大小(以字节为单位):0正文大小(以字节为单位):25样本数:1错误计数:1响应代码:空 0响应消息:java.sql.SQLException:无效的数据类型:游标
响应头:oracle.jdbc.driver.T4CConnection@58ba09
Response headers:oracle.jdbc.driver.T4CConnection@58ba09
SampleResult 字段:内容类型:文本/纯文本数据编码:UTF-8
SampleResult fields:ContentType: text/plainDataEncoding: UTF-8
如何解决?谢谢!
这是我的Java代码:
Here is my code in java:
public String RK_JSCX() throws Exception {
RK_JSCX_Response response = null;
List<RK_JSCX_Outtable> list = null;
Connection con = null;
CallableStatement cs = null;
ResultSet rs = null;
String sql = null;
try {
sql = "{call RK_JSCX(?,?)}";
con = ConnectionUtils.getInstance().getConnect();
if (con.isClosed()) {
throw new IllegalStateException("ERROR.THE CONNECTION ISCLOSED");
}
cs = con.prepareCall(sql);
cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
rs = (ResultSet) cs.getObject(1);
list = new ArrayList<RK_JSCX_Outtable>();
while (rs.next()) {
RK_JSCX_Outtable out = new RK_JSCX_Outtable(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getInt(5), rs.getString(6));
list.add(out);
}
String outInfo = cs.getString(2);
response = new RK_JSCX_Response(list, outInfo);
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (rs != null) {
rs.close();
if (cs != null) {
cs.close();
}
if (con != null) {
con.close();
}
}
} catch (SQLException e) {
System.out.println("Exception2");
e.printStackTrace();
}
}
return JSON.toJSONString(response);
}
推荐答案
这是怎么做的:
SQL 查询:调用 RK_JSCX(?,?)
SQL Query : call RK_JSCX(?,?)
参数值:OUT、OUT
Parameter values : OUT, OUT
参数类型:OUT -10,OUT VARCHAR
Parameter types : OUT -10,OUT VARCHAR
-10 是 OracleTypes.CURSOR 的 int 值
-10 being the int value of OracleTypes.CURSOR
变量名:cursor, outInfo
Variable names: cursor, outInfo
Names are what you want
JMeter 允许使用比 java.sql.Types 常量更多的类型,在这种情况下,不是使用常量名称,而是使用常量的整数值.
JMeter allows using more types than java.sql.Types constants, in this case instead of using Constant names, you use integer values of constants.
文档已经澄清(在下一个 JMeter 版本中),请参阅:
Documentation has been clarified (in next JMeter version) , see:
这篇关于如何使用 jmeter 测试具有 sys_refcursor 返回类型的 Oracle 存储过程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!