PostgreSQL JDBC执行PL / pgSQL

时间:2016-11-14 16:01:51

标签: postgresql jdbc plpgsql

尝试通过JDBC驱动程序运行PL / pgSQL时(postgresql-9.4.1211.jre7.jar;使用ANT)我收到以下错误:错误:语法错误在“$”或附近

有没有办法通过设置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)

1 个答案:

答案 0 :(得分:0)

我尝试用JDBC执行DO语句,它运行正常。

你的陈述中必定有些奇怪的东西。通过将log_min_error_statementlog_min_messages设置为error来尝试并记录该语句。执行该语句,然后查看PostgreSQL日志文件中的消息。它应该包含实际执行的语句。检查它是否有奇怪的字符和其他陌生感。

请注意,PL / pgSQL中存在语法错误:THENEND之间必须存在某些内容。对于无操作,请使用语句NULL;