postgresql:“DO”处或附近的语法错误

时间:2014-06-20 21:33:44

标签: postgresql syntax plpgsql procedure

我正在尝试运行DO块,例如这个(从本论坛的帖子中复制)

DO $$
DECLARE x int;
    BEGIN
    x := 10;
    RAISE NOTICE '>>>%<<<', x;
END;
$$

但会发生什么:

  

错误:“DO”处或附近的语法错误

     

SQL状态:42601

     

字符:1

没关系,我操作的DO块,DO语句根本不起作用(包括从doucment复制/粘贴的例子,我想知道可能是什么原因。请问有人可以帮助我吗? / p>

非常感谢

2 个答案:

答案 0 :(得分:5)

你正在使用旧版本的PostgreSQL。

一般情况下,如果您在关键字上遇到意外的语法错误,或者PostgreSQL抱怨显然存在缺少的功能,首先要检查您尝试使用的功能是否确实存在于您的版本中。

您可以将DO块替换为:

CREATE OR REPLACE FUNCTION some_func() RETURNS void AS 
$$
.. body of the DO block here...
$$ LANGUAGE plpgsql VOLATILE;

SELECT some_func();

DROP FUNCTION some_func();

旧版本。

答案 1 :(得分:1)

如果你对postgreSQL 9.0+有同样的错误,那么是由于错误的执行类型。 pgAdiminIII有两个执行(绿色三角形)按钮:

  • 执行查询
  • 执行pgScript

要运行DO $$,您需要第一个。