簡體   English   中英

如何在Java JDBC(Oracle數據庫)中添加OUT參數以起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM