在Postgres 13中,我比较了从另一个过程调用一个过程与重复代码对性能的影响,发现可以使用CALL或PERFORM调用其他过程。我在谷歌上搜索了不同之处但我找到的唯一相似之处是
CALL
PERFORM
这是PERFORM与EXECUTE的对比,而不是PERFORM与CALL的对比。有谁知道区别是什么吗?我应该使用哪一个(当从PL/pgSQL过程调用过程时)?
EXECUTE
jucafojl1#
CALL是用于执行**PROCEDURE的SQL命令,在添加SQL过程时随Postgres 11一起添加。示例:
PROCEDURE
CALL my_procedure('arg1');
SELECT是用于执行**FUNCTION的普通SQL命令**。示例:
SELECT
FUNCTION
SELECT my_function('arg1');
... BEGIN PERFORM my_function('arg1'); END ...
... BEGIN EXECUTE my_string_variable USING arg1; END ...
SQL字符串可以包含CALL、SELECT或任何其他SQL命令。但是,引用USING子句的参数符号只能用作DML命令SELECT、INSERT、UPDATE、DELETE和MERGE中的数据元素(这些符号不能用于代替表名等)。除非添加INTO子句,否则结果将自动丢弃。你不能CALL一个函数。不能对过程执行SELECT或PERFORM操作。不能使用PERFORM和EXECUTE,也不能使用EXECUTE和PERFORM,这两个命令都不是SQL命令。
USING
INSERT
UPDATE
DELETE
MERGE
INTO
相关:
1条答案
按热度按时间jucafojl1#
CALL
是用于执行**PROCEDURE
的SQL命令,在添加SQL过程时随Postgres 11一起添加。示例:SELECT
是用于执行**FUNCTION
的普通SQL命令**。示例:PERFORM
是一个PL/pgSQL命令**,用于替换SELECT
关键字(在其他普通SQLSELECT
命令中)并丢弃任何结果。示例:EXECUTE
是用于执行(动态生成的)SQL字符串的PL/pgSQL命令**。允许使用任何完整的SQL命令,而不仅仅是SELECT
。示例:SQL字符串可以包含
CALL
、SELECT
或任何其他SQL命令。但是,引用USING
子句的参数符号只能用作DML命令SELECT
、INSERT
、UPDATE
、DELETE
和MERGE
中的数据元素(这些符号不能用于代替表名等)。除非添加
INTO
子句,否则结果将自动丢弃。你不能
CALL
一个函数。不能对过程执行
SELECT
或PERFORM
操作。不能使用
PERFORM
和EXECUTE
,也不能使用EXECUTE
和PERFORM
,这两个命令都不是SQL命令。相关: