我使用了从 Oracle 存储过程返回 JDBC 结果集一文中所示的方法。
String query = "{ call ? := sp_get_stocks(?) }";
CallableStatement stmt = conn.prepareCall(query);
stmt.registerOutParameter(1, OracleTypes.CURSOR);
stmt.setFloat(2, price);
stmt.execute();
ResultSet rs = (ResultSet)stmt.getObject(1);
while (rs.next()) {
//...
}
代码完成了这项工作。
但是我倾向于在我的代码中使用命名参数,并希望将其更改为:
stmt.registerOutParameter("returnvalue", OracleTypes.CURSOR);
stmt.setFloat("p$price", price);
这给了我一个预言错误:
java.sql.SQLException:ORA-06550:第 1 行,第 12 列:
PLS-00103:在预期以下情况之一时遇到符号“>”:
:= 。( @ % ; 符号 "; 被插入到">" 之前继续。
我应该使用任何特殊约定来命名函数返回值吗?或者这甚至可能吗?
PS:我实际上是java新手,主要使用.Net;所以我可能会遗漏一些非常基本的东西。
更新
当使用两个输入参数、一个输出参数和函数返回值本身调用更复杂的函数时,我似乎没有收到此错误。在这种情况下,命名参数运行良好。
似乎问题源于OracleTypes.CURSOR
函数返回值......