【问题标题】:SQLSyntaxErrorException: ORA-00900: invalid SQL statement using JavaSQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句
【发布时间】:2018-06-06 21:10:30
【问题描述】:

我需要使用简单的数据库客户端通过 Java EXEC DBMS_STREAMS_ADM.SET_TAG(tag => HEXTORAW('17')); 使用以下内容。连同其他常见的选择/删除查询,但它抱怨无效的 SQL 语句。

我尝试将 exec 作为 PL/SQL 删除并使用 {} 调用它,但我仍然收到相同的错误。

【问题讨论】:

  • 你是如何在 Java 中调用存储过程的?请附上您拥有的代码。
  • DBClient.execute("exec DBMS_STREAMS_ADM.set_tag(tag => HEXTORAW('17'))");
  • EXEC 是 SQL*Plus 语法,你不能在这里使用它。您可以改用anonymous PL/SQL blockCALL 语法。

标签: java


【解决方案1】:

EXEC 是 SQL*Plus(Oracle 的原生 SQL 客户端)语法,您不能在这里使用它。调用存储过程的 JDBC 语法是通过 CALL 指令。您可以省略调用中的参数名称 (tag => HEXTORAW('17'))。例如:

try (CallableStatement cs 
        = myConnection.prepareCall("{ call DBMS_STREAMS_ADM.SET_TAG(HEXTORAW(?)) }")) {

    cs.setString(1, "17");        
    cs.execute();
}

目前尚不清楚您当前使用的是哪个DBClient(请告诉我们),但以下方法也可以使用:

DBClient.execute("{ call DBMS_STREAMS_ADM.set_tag(HEXTORAW('17')) }");

然后

DBClient.execute("begin DBMS_STREAMS_ADM.SET_TAG(HEXTORAW('17')); end;");

【讨论】:

  • 我试过 DBClient.execute("{ call DBMS_STREAMS_ADM.set_tag(tag => HEXTORAW('17')) }");但必须声明它对 DBMS_STREAMS_ADM 的抱怨
  • 现在可以了。最后的一些用户权限问题。谢谢
猜你喜欢
  • 1970-01-01
  • 2010-12-29
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
相关资源
最近更新 更多