在 Postgres 13 中,我对调用另一个过程与在代码中重复的性能影响进行了测试。我发现可以使用 CALL
或 PERFORM
来调用其他过程。
我查找了区别,但唯一类似的是:
它讨论了 PERFORM
与 EXECUTE
,而不是 PERFORM
与 CALL
之间的区别。
有人知道区别吗?在 PL/pgSQL 过程中调用过程时应该使用哪个?
在 Postgres 13 中,我对调用另一个过程与在代码中重复的性能影响进行了测试。我发现可以使用 CALL
或 PERFORM
来调用其他过程。
我查找了区别,但唯一类似的是:
它讨论了 PERFORM
与 EXECUTE
,而不是 PERFORM
与 CALL
之间的区别。
有人知道区别吗?在 PL/pgSQL 过程中调用过程时应该使用哪个?
CALL
是一个SQL命令,用于执行PROCEDURE
,它在Postgres 11中添加了SQL过程。 示例:
CALL my_procedure('arg1');
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字符串可以包含CALL
或SELECT
或任何其他SQL命令。但是,只有在DML命令SELECT
、INSERT
、UPDATE
、DELETE
和MERGE
中,使用USING
子句引用参数符号作为数据元素是允许的(这些符号不能用于表名等)。如果未添加INTO
子句,则结果将自动丢弃。
您无法CALL
函数。
您无法SELECT
或PERFORM
过程。
无法PERFORM
一个EXECUTE
,也无法EXECUTE
一个PERFORM
,因为它们都不是SQL命令。
db<>fiddle 在此处
相关:
perform
来调用存储过程。调用过程的唯一方法是使用call
。https://dbfiddle.uk/?rdbms=postgres_13&fiddle=f9682a6888fb157e2522f80294669996 - user330315