首页 > 解决方案 > 运行简单执行时出现语法错误

问题描述

为什么在这个简单的perform调用中出现语法错误

create or replace function foo ()
returns void
as $$
begin
end;
$$ language 'plpgsql';

perform * from foo ();

我在ExtendsClass上在线测试过

在此处输入图像描述

标签: databasepostgresql

解决方案


PERFORM是 PL/pgSQL 语句,而不是 SQL 语句。这意味着它只能在函数定义的 BEGIN 和 END 之间使用。见下文,我使用 PERFORM 从 foo() 调用 bar()。

create or replace function bar ()
returns void
as $$
begin
RAISE NOTICE 'bar() ran';
end;
$$ language 'plpgsql';

create or replace function foo ()
returns void
as $$
begin
perform bar();
end;
$$ language 'plpgsql';

您链接的 SQL 小提琴站点不显示标准错误,但如果您将上面的内容粘贴到 psql 然后select * from foo();,您会看到它bar()运行。

testdb=# select * from foo();
NOTICE:  bar() ran
 foo 
-----
 
(1 row)

推荐阅读