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?