PL/pgSQL: PERFORM与CALL的区别

8

在 Postgres 13 中,我对调用另一个过程与在代码中重复的性能影响进行了测试。我发现可以使用 CALLPERFORM 来调用其他过程。

我查找了区别,但唯一类似的是:

它讨论了 PERFORMEXECUTE,而不是 PERFORMCALL 之间的区别。

有人知道区别吗?在 PL/pgSQL 过程中调用过程时应该使用哪个?


1
你不能使用 perform 来调用存储过程。调用过程的唯一方法是使用 callhttps://dbfiddle.uk/?rdbms=postgres_13&fiddle=f9682a6888fb157e2522f80294669996 - user330315
你说得对,我的错。我意识到我正在使用一个void函数,而不是一个过程。谢谢! - Awer Muller
1个回答

12

CALL 是一个SQL命令,用于执行PROCEDURE,它在Postgres 11中添加了SQL过程。 示例:

CALL my_procedure('arg1');

SELECT是执行FUNCTION的纯粹SQL命令。例如:

SELECT my_function('arg1');

PERFORM 是一个PL/pgSQL 命令,用于替代 SELECT 关键字(仅在普通的 SQL SELECT 命令中),且不返回任何结果。例如:

...
BEGIN
   PERFORM my_function('arg1');
END
...

EXECUTE 是一个用于执行(动态生成的)SQL字符串的PL/pgSQL命令。可以使用任何完整的SQL命令,不仅限于SELECT。例如:

...
BEGIN
   EXECUTE my_string_variable
   USING arg1;
END
...
SQL字符串可以包含CALLSELECT或任何其他SQL命令。但是,只有在DML命令SELECTINSERTUPDATEDELETEMERGE中,使用USING子句引用参数符号作为数据元素是允许的(这些符号不能用于表名等)。

如果未添加INTO子句,则结果将自动丢弃。


您无法CALL函数。
您无法SELECTPERFORM过程。
无法PERFORM一个EXECUTE,也无法EXECUTE一个PERFORM,因为它们都不是SQL命令。

db<>fiddle 在此处

相关:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接