简体   繁体   English

java.sql.SQLSyntaxErrorException:ORA-00922:缺少或无效的选项

[英]java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option

I am creating a new table in Oracle DB using java jdbc and ending up in missing or invalid option. 我正在使用java jdbc在Oracle DB中创建一个新表,并最终出现丢失或无效的选项。 Dont know what is wrong in the query as such 这样就不知道查询中出了什么问题

I have tried running the same query in SQL Plus and SQL Developer and it just works fine but when run through java jdbc its throwing the above error. 我试过在SQL Plus和SQL Developer中运行相同的查询,但效果很好,但是在通过java jdbc运行时,抛出上述错误。 This is the same extract from java code as well. 这也是从Java代码中提取的内容。 Using executeUpdate() method for this. 为此使用executeUpdate()方法。

CREATE TABLE EventTable (
    "EVENTID" NUMBER, "MODULE" NVARCHAR2(512),"EVENTTYPE" NVARCHAR2(512),
    "MODULEANDEVENTTEXT" NVARCHAR2(512), "TIME" TIMESTAMP (6), "SOURCE" NVARCHAR2(512),
    "SEVERITY" NVARCHAR2(512), "NODE" NVARCHAR2(512), "ACKNOWLEDGED" NUMBER(*,0),
    "USERSID" NVARCHAR2(512), "DID" NVARCHAR2(512), "MID" NVARCHAR2(512), "FH" NVARCHAR2(512),
    "LD" NVARCHAR2(512), "TD" NVARCHAR2(512), "ED" NVARCHAR2(512), "UD" NVARCHAR2(512), 
    "GD" NVARCHAR2(512), PRIMARY KEY ("EVENTID")
); 

java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option java.sql.SQLSyntaxErrorException:ORA-00922:缺少或无效的选项

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361)

Java Snippet Java代码段

 countQuery.append(
                "CREATE GLOBAL TEMPORARY TABLE EventTable ( \"EVENTID\" NUMBER,  \"MODULE\" NVARCHAR2(512),\"EVENTTYPE\" NVARCHAR2(512), \"MODULEANDEVENTTEXT\" NVARCHAR2(512), \"TIME\" TIMESTAMP , \"SOURCE\" NVARCHAR2(512), \"SEVERITY\" NVARCHAR2(512), \"NODE\" NVARCHAR2(512), \"ACKNOWLEDGED\" NUMBER(*,0), \"USERSID\" NVARCHAR2(512), \"DESKTOPID\" NVARCHAR2(512), \"MACHINEID\" NVARCHAR2(512), \"FOLDERPATH\" NVARCHAR2(512), \"LUNID\" NVARCHAR2(512), \"THINAPPID\" NVARCHAR2(512), \"ENDPOINTID\" NVARCHAR2(512), \"USERDISKPATHID\" NVARCHAR2(512), \"GROUPID\" NVARCHAR2(512), PRIMARY KEY (\"EVENTID\")); "); 

PreparedStatement stmt = connection.prepareStatement(countQuery);

stmt.executeUpdate();

Solution: 解:

you will need to use Statement object and create instance of it to execute "create global temporary table" query [ createStatment instead of prepareStatment 您将需要使用Statement对象并创建其实例以执行“创建global temporary表”查询[ createStatment而不是prepareStatment

Reason : 原因:

global temporary is not valid DDL to run from connection.PreparedStatment() global temporary不是有效的DDL,无法从connection.PreparedStatment()运行

Fix: 固定:

Statement stmt = con.createStatement();
stmt.executeUpdate(countQuery)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.sql.SQLSyntaxErrorException:ORA-00911:无效字符 - java.sql.SQLSyntaxErrorException: ORA-00911: invalid character java.sql.SQLSyntaxErrorException:ORA-00903:表名无效 - java.sql.SQLSyntaxErrorException: ORA-00903: invalid table name java.sql.SQLSyntaxErrorException:ORA-00904:“columnName”:无效标识符 - java.sql.SQLSyntaxErrorException: ORA-00904: “columnName”: invalid identifier 错误 --> java.sql.SQLSyntaxErrorException: ORA-01722: 无效号码 - ERROR --> java.sql.SQLSyntaxErrorException: ORA-01722: invalid number java.sql.SQLSyntaxErrorException:ORA-00936:缺少表达式 - java.sql.SQLSyntaxErrorException: ORA-00936: missing expression java.sql.SQLSyntaxErrorException:ORA-00904::无效的标识符 - java.sql.SQLSyntaxErrorException: ORA-00904: : invalid identifier java.sql.SQLSyntaxErrorException:ORA-00928:缺少SELECT关键字 - java.sql.SQLSyntaxErrorException: ORA-00928: missing SELECT keyword ORA-00922:在oracle中执行“set long 100000”语句时缺少或无效选项 - ORA-00922: missing or invalid option when execute “set long 100000” statement in oracle 我正在使用oracle 10g创建表,但在查询中显示“ ORA-00922:缺少或无效的选项” - Im using oracle 10g to create table but it is showing “ORA-00922: missing or invalid option” and in the query java.sql.SQLSyntaxErrorException: ORA-01722 - java.sql.SQLSyntaxErrorException: ORA-01722
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM