Rah*_*lee 2 java oracle plsql jdbc oracle11g
我可以使用以下语法的call语句调用pl/sql函数:
String call = "{ ? = call p_some_package.some_function( ?, ?, ?, ?, ?) }";
CallableStatement cs = connection.prepareCall(call);
Run Code Online (Sandbox Code Playgroud)
但是我必须使用它们的索引传递参数,因为我必须注册返回值,它没有名称:
cs.registerOutParameter(1, OracleTypes.NUMBER);
cs.setInt(2, someInteger);
...
Run Code Online (Sandbox Code Playgroud)
但是在调用过程时,我可以提供参数名称,因为没有"无名"out参数,因为有一个函数:
cs.setInt("param_name", param_value);
Run Code Online (Sandbox Code Playgroud)
Oracle pl/sql参考声明,对于函数,Oracle会创建一个返回的额外OUT参数.所以我的问题是:是否可以传递此参数的名称或以某种方式为此参数指定名称,并使用它将参数传递给JDBC中的pl/sql函数,就像我为程序做的那样?
类似的问题,没有答案: Java命名参数的名称(用于Oracle JDBC函数结果)
您可以使用匿名块而不是"调用"语法来使用命名绑定
在使用这种方法之前,请看一下这篇文章,并确保你不会在颠倒setXXX变量的顺序时遇到麻烦 http://info.michael-simons.eu/2012/07/23/oracle-jbdc-callablestatements-and -named参数/
@Test
public void testFunctionOrdered() throws SQLException {
String sql = "begin :quotient := TEST_QUOTIENT(DIVIDEND => :numerator, DIVISOR => :denominator); end;";
CallableStatement cs = conn.prepareCall(sql);
cs.registerOutParameter("quotient", Types.INTEGER);
cs.setInt("numerator", 6);
cs.setInt("denominator", 2);
cs.execute();
assertEquals(3, cs.getInt("quotient"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |