从 Java 调用 Oracle 函数

标签: JDBC Java Oracle
发布时间: 2017/4/15 18:55:12
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有问题从 Java 1.6,调用 Oracle 函数 (不存储过程) 使用 ojdbc14.jar。

我不知道该函数所包含的我称它为从远程服务器,这是我所知道的︰

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)   

我需要使用的架构是︰ 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();

但我总是看见这在日志文件中︰

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)

调用函数错了吗?或者这可能是什么?

提前谢谢你的帮助 !

解决方法 1:

它应该是︰

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }";
赞助商