I am creating a new table in Oracle DB using java jdbc and ending up in missing or invalid option. 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. This is the same extract from java code as well. Using executeUpdate() method for this.
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
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
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
Reason :
global temporary
is not valid DDL to run from connection.PreparedStatment()
Fix:
Statement stmt = con.createStatement();
stmt.executeUpdate(countQuery)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.