如何在Oracle SQL Developer中执行plpgsql匿名块?

时间:2015-01-05 12:08:40

标签: postgresql oracle-sqldeveloper plpgsql

如果我在工作表中执行单个SQL语句(例如CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';),那么它可以正常工作。将它包装在匿名块中,如下所示:

DO
$$
BEGIN 
  CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';
END
$$;

我收到以下错误消息:

Error starting at line : 3 in command -
BEGIN 
  CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';
END
$$;
Error report -
ERROR: syntax error at or near "CREATE"
  Position: 10

但是,当我在psql shell中执行它时,相同的脚本工作正常。我错过了一些明显的东西吗?

使用:
PostgreSQL版本9.4
Postgres JDBC驱动程序postgresql-9.3-1102.jdbc41
SQL Developer 4.0版(jdk 1.7.0_71)

1 个答案:

答案 0 :(得分:1)

错误的来源是 JDBC无法正确处理美元引用(尚未)。相关回答:

在这种情况下,您可以规避问题:

DO
'
BEGIN 
  CREATE ROLE my_user LOGIN PASSWORD ''my_pwd'' VALID UNTIL ''infinity'';
END
';

如果这不起作用,请尝试设置不同的查询终止符 ,就像linked answer中建议的那样。

您似乎意识到您根本不需要DO语句来代码示例代码。只是:

CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';