database - 运行简单执行时出现语法错误
问题描述
为什么在这个简单的perform
调用中出现语法错误
create or replace function foo ()
returns void
as $$
begin
end;
$$ language 'plpgsql';
perform * from foo ();
解决方案
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)
推荐阅读
- laravel - 使用 spatie / laravel-google-calendar 模拟用户
- javascript - Javascript - 在对象数组(矩阵)中查找不同的属性
- python - 如何将 NumPy 特征和标签数组转换为可用于 model.fit() 的 TensorFlow 数据集?
- google-cloud-platform - 以编程方式安排 BigQuery 回填
- javascript - Bootstrap Switch Toggle 在数据表第二页上不起作用
- c++ - 谁能告诉我如何以给定的概率抛出异常?
- c++ - #包括
在带有 mingw64 的 Visual Studio Code 中找不到 - json - 使用 Azure 数据工厂筛选 JSON 数据
- linux - 从 C 代码中读取 ptp 主偏移量(使用 /dev/ptp0)
- mysql - SQL 查询按月获取净销售额