从Java调用Oracle函数

lul*_*u88 18 java oracle jdbc

我在使用ojdbc14.jar从Java 1.6调用Oracle FUNCTION(不是存储过程)时遇到问题.

我不知道函数包含什么,因为我从远程服务器调用它,我所知道的是:

FUNCTION ap_ch_get_acct_balances (VAR_PI_MOB_NO_ACCT_NO VARCHAR2,
VAR_REPLY_CODE OUT NUMBER, VAR_EXT_RESPONSE OUT VARCHAR2, VAR_PO_ACC_BAL OUT CHAR,
VAR_PO_ACCT_NO OUT CHAR)   
Run Code Online (Sandbox Code Playgroud)

我需要使用的架构是:FCRLIVE.AP_CH_GET_ACCT_BALANCES

我在尝试这个:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }";
CallableStatement cstmt = conn.prepareCall(call);
cstmt.setQueryTimeout(1800);
cstmt.setString(1, inputCode);
cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.NUMBER);
cstmt.registerOutParameter(3, oracle.jdbc.OracleTypes.VARCHAR);
cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.CHAR);
cstmt.registerOutParameter(5, oracle.jdbc.OracleTypes.CHAR);
cstmt.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

但我一直在日志文件中看到这个:

java.sql.SQLException: ORA-01006: bind variable does not exist
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2688)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
Run Code Online (Sandbox Code Playgroud)

我称这个功能错了吗?或者这可能是什么?

在此先感谢您的帮助!

kon*_*dkg 16

它应该是:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }";
Run Code Online (Sandbox Code Playgroud)

  • 那是因为您将绑定设置为仅 5 个参数,并且您在 Oracle 函数中有 6 个:定义中的 return param + 5。你也打错了。只有 OUT 参数应由“registerOutParameter”添加,IN(函数声明中的第一个)参数应添加为“setParameter...”)。注意它们的顺序和索引:) (2认同)
  • 该链接有什么用? (2认同)