SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句

Posted

技术标签:

【中文标题】SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句【英文标题】:SQLSyntaxErrorException: ORA-00900: invalid SQL statement using Java 【发布时间】: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 block 或CALL 语法。 【参考方案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 的抱怨 现在可以了。最后的一些用户权限问题。谢谢

以上是关于SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

Bug解决 java.sql.SQLSyntaxErrorException 异常

SQLSyntaxErrorException: ORA-00979: 不是 GROUP BY 表达式

java.sql.SQLSyntaxErrorException:表'mydb.alien'不存在

java.sql.SQLSyntaxErrorException:未知列

为啥 Bluemix dashDB 操作会引发 SQLCODE=-1667 的 SqlSyntaxErrorException?

java.sql.SQLSyntaxErrorException: ORA-00904: : 标识符无效