java.sql.SQLSyntaxErrorException: ORA-00922: отсутствует или недействительна опция - PullRequest
1 голос
/ 17 мая 2019

Я создаю новую таблицу в БД Oracle, используя java jdbc и в результате отсутствует или неверный параметр.Не знаю, что не так в запросе как таковом

Я пытался выполнить один и тот же запрос в SQL Plus и SQL Developer, и он просто отлично работает, но при запуске через java jdbc выдает вышеуказанную ошибку.Это тот же фрагмент из кода Java, а также.Используя для этого метод 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: отсутствует или недействительна опция

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

 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();

1 Ответ

0 голосов
/ 20 мая 2019

Решение:

вам нужно будет использовать Statement объект и создать его экземпляр для выполнения запроса "create global temporary table" [createStatment вместо prepareStatment

Причина:

global temporary недопустимый DDL для запуска из соединения.1020 *

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