我想运行一个DO块,例如这个(从论坛上复制的):
DO $$
DECLARE x int;
BEGIN
x := 10;
RAISE NOTICE '>>>%<<<', x;
END;
$$
但发生了什么:
错误:在“DO”附近有语法错误
SQL 状态:42601
字符:1
无论我运行哪个 DO 块,DO 语句都不起作用(包括从文档复制/粘贴的示例),我想知道原因是什么。请问有人能帮帮我吗?
非常感谢。
我想运行一个DO块,例如这个(从论坛上复制的):
DO $$
DECLARE x int;
BEGIN
x := 10;
RAISE NOTICE '>>>%<<<', x;
END;
$$
但发生了什么:
错误:在“DO”附近有语法错误
SQL 状态:42601
字符:1
无论我运行哪个 DO 块,DO 语句都不起作用(包括从文档复制/粘贴的示例),我想知道原因是什么。请问有人能帮帮我吗?
非常感谢。
您正在使用旧版本的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();
如果您在使用postgreSQL 9.0+时遇到了相同的错误,那么原因是执行类型错误。pgAdminIII有两个执行(绿色三角形)按钮:
要运行DO $$
,您需要使用第一个按钮。
DO
在Postgres 9.0中被添加了。如果使用旧版本,请参考Postgres < 9.0的DO块的等效语句是什么?。 - hobbsselect version();
的输出。 - Clodoaldo Neto