我有一个过程,它接受一个VARCHAR参数并返回一个OUT CURSOR,这是一个列表,在这种情况下是3行,有9列。
我当前的JDBC请求:
CALL foo.bar.procedure('123456', ?)
回复数据:
-1 updates.
Output variables by position:
[1] oracle.jdbc.driver.OracleResultSetImpl@21512d0b
outList现在是oracle.jdbc.driver.OracleResultSetImpl@21512d0b
我已经尝试从BeanShell样本器中的outList获取一些信息,如建议here,但除了ResultSet对象id之外,我无法从中获取任何信息。
我是通过Jmeter调用程序的新手,查看结果树似乎没有向我显示任何结果数据,我一直在使用SQL查询和参数值来回,试图修复它,但是我的输出总是遇到同样的问题。
我也尝试过类似的设置:
DECLARE
refCursor sys_refcursor;
Type MyRec Is Record (
v1 varchar2(
v2 varchar2(50),
...
v13 varchar2(10));
rec MyRec;
BEGIN
foo.bar.procedure('123456',refCursor);
LOOP
FETCH refCursor INTO rec;
EXIT WHEN refCursor%NOTFOUND;
dbms_output.put_line(
rec.v1||','||
rec.v2||','||
...
rec.v13);
END LOOP;
END;
我是正确调用过程还是JDBC请求设置中缺少的东西?
答案 0 :(得分:1)
我终于通过远离JDBC Request sampler并使用BeanShell Sampler来解决这个问题。
import java.sql.*;
import oracle.jdbc.*;
import org.apache.jmeter.protocol.jdbc.config.DataSourceElement;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
CallableStatement stmt;
// "myConnConfigName" is the 'JDBC Connection Configuration' variable name
Connection conn = DataSourceElement.getConnection("myConnConfigName");
try {
stmt = conn.prepareCall("CALL foo.bar.procedure(?,?)");
stmt.setString(1, "123456");
stmt.registerOutParameter(2, OracleTypes.CURSOR);
stmt.executeUpdate();
rs = (ResultSet) stmt.getObject(2);
while (rs.next()) {
rsmd = rs.getMetaData();
log.info("ColumnCount:" + rsmd.getColumnCount().toString());
log.info("RowNo:" + rs.getRow().toString());
// TODO: Store data.
// Loop through columns with rs.getString(i);
}
}
catch(Throwable ex) {
log.error("Error message: ", ex);
throw ex;
}
finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
答案 1 :(得分:0)
根据Retrieving and Modifying Values from Result Sets文章提取OracleResultSetImpl
中的“有趣”值,例如:
import java.sql.ResultSet
ResultSet rs = (ResultSet)vars.getObject('outList')
while (rs.next()) {
vars.put('column_1_row_1_value`, rs.getString(0))
///...
}
有关详细信息,请参阅JDBC Tutorial和Apache Groovy - Why and How You Should Use It。