当前位置: 首页 > 面试题库 >

从Java调用Oracle函数

丁均
2023-03-14
问题内容

我遇到了使用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)

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

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

在此先感谢您的帮助!


问题答案:

它应该是:

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


 类似资料:
  • 我发布这个问题是因为我在尝试从oracle函数中使用dbms\U比较oracle包时遇到了一些错误。 我创建了一个函数,该函数应该返回执行的比较的scanID,以便能够从Java中检索scanID的值。但是,该函数没有成功执行,因为它引发了一些错误。dbms\u比较被识别为标识符,因此引发以下错误:PLS-00201:必须声明标识符“dbms\u比较”。 请在下面找到我创建的Oracle函数。任何

  • 问题内容: 我使用PhoneGap开发了一个应用程序。我得到了一项在后台进行本地编码的服务(该服务和手机缺口应用程序在同一项目中)。不幸的是,我想从此服务中调用javascript函数。因此,我在网上搜索并创建了一些有趣的东西:创建一个扩展Plugin的类并在其中进行一些处理。然后我发现了这个: 我用此代码进行了测试,但是发生了一些错误: 这是我测试的方式: 在类c中,execute方法如下: 当

  • 我想找到从Java调用RPG函数的方法。我必须能够传入参数、返回结果集和输出参数。 我能够找到这个,但它使用存储过程。不是我想走的路。我还发现这个问题调用AS400 RPG从Java他们谈论JTOpen。我还在尝试寻找教程,看看JTOpen是否能帮助我,但还没有找到任何教程。 如果您能帮助我找到一种从Java调用RPG函数的方法,我将不胜感激。

  • 问题内容: 我需要从Java调用C#函数,为此,我创建了以下代码。我有一个创建的Java头文件Authenticator.h,代码如下: 然后,我创建了一个身份验证的C#函数 然后,我尝试使用以下代码从C ++(项目创建dll)中调用C#函数; 最后创建一个需要从Java调用的dll。该dll已创建,并且可以在Java中很好地加载它,但是在Java中却收到此错误日志。我可能会错过什么。 问题答案:

  • 问题内容: 如何从C ++应用程序调用Java函数? 我知道从CMD(或类似技术)调用它们的方法,但我宁愿不使用它们。 问题答案: 例如,检查从C创建JVM。它显示了创建JVM和调用方法的示例过程。如果JVM已经存在;例如,您的C程序被Java程序调用(回调情况),则可以缓存JNIEnv *指针。 作为建议,请小心从C / C ++缓存指向JVM的指针,其中涉及到一些有关可以缓存的内容的语义,以后

  • 例外情况。kt: 在科特林: 它在kotlin中工作,函数是内联的。 但是当在Java代码中使用时,它就是不能内联,仍然是一个正常的静态方法调用(从反编译的内容中可以看出)。 像这样的东西: