2016-11-14 6 views
0

При попытке запуска PL/PgSQL через драйвер JDBC (PostGreSQL-9.4.1211.jre7.jar; с использованием ANT) я получаю следующее сообщение об ошибке: Ошибка синтаксиса или вблизи "$"PostgreSQL JDBC выполнения PL/PgSQL

: ERROR

Есть ли способ исправить это, установив свойства JDBC или изменив запрос PL/pgSQL?

запрос:

DO $$ 
BEGIN 
    CREATE SEQUENCE id_sequence_SEQ OWNED BY id_sequence.id; 
    EXCEPTION WHEN duplicate_table 
    THEN 
END 
$$ 
LANGUAGE plpgsql; 

ошибка:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$" 
Position: 5 
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2458) 
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2158) 
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:291) 
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:432) 
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:358) 
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:305) 
at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:291) 
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:269) 
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:265) 
+0

Можете ли вы не просто выполнить CREATE SEQUENCE, а затем уловить любое потенциальное исключение со стороны Java? –

+0

Этот код на самом деле не вызывается из Java. Это задача ANT перед установкой. – user1854959

ответ

0

Я попытался выполнение DO заявления с JDBC, и она работает просто отлично.

В вашем заявлении должно быть что-то странное. Попробуйте и запишите отчет, установив log_min_error_statement и log_min_messages в error. Выполните инструкцию, затем просмотрите сообщение в файле журнала PostgreSQL. Он должен содержать инструкцию, которая была фактически выполнена. Изучите это для странных персонажей и другой странности.

Также обратите внимание, что в вашем PL/pgSQL есть синтаксическая ошибка: должно быть что-то между и END. Для no-op используйте инструкцию NULL;.

+0

Ничто из этого не работает. Получение странных следов стека из JDBC. Спасибо за отзыв о NULL; – user1854959