[英]how to call stored function of IN and OUT parameter in Oracle Database using Java
[英]How add OUT parameter to function in Java JDBC (Oracle database)
Oracle數據庫中的SQL函數:
FUNCTION init(id in number, code out varchar2) RETURN number;
我的Java代碼中有SQL(Oracle數據庫):
private static final String MY_FUNCTION_SQL = "SELECT live.api.init(?,?) FROM DUAL";
而我的方法:
void myMethod() throws SQLException {
try(CallableStatement cs = sdcon.prepareCall(MY_FUNCTION_SQL) {
cs.setLong(1, _myID);
cs.registerOutParameter(2, Types.VARCHAR);
ResultSet resultSet = sdInsertTask.executeQuery();
}
}
在executeQuery()
我得到了異常:
java.sql.SQLException:ORA-06572:函數INIT帶有參數。
將my_function_sql更改為
private static final String MY_FUNCTION_SQL = "call live.api.init(?,?)";
您可以在CallableStatement的javadoc中找到語法:
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
{call <procedure-name>[(<arg1>,<arg2>, ...)]}
因此,您只需要調整查詢,因為您需要OUT參數,請使用第一種語法
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
就像是 :
String initQuery = "{?= call live.api.init(?)}";
long _myID = 1L;
try(CallableStatement cs = conn.prepareCall(initQuery)) {
cs.registerOutParameter(1, Types.VARCHAR);
cs.setLong(2, _myID);
ResultSet resultSet = cs.execute();
}
注意:您在代碼中調用了另一個名為sdInsertTask
Statement
...而不是cs
您可以在這里找到完整的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.