postgresql PL/pgSQL:执行与调用

lmyy7pcs  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(561)

在Postgres 13中,我比较了从另一个过程调用一个过程与重复代码对性能的影响,发现可以使用CALLPERFORM调用其他过程。
我在谷歌上搜索了不同之处但我找到的唯一相似之处是

这是PERFORMEXECUTE的对比,而不是PERFORMCALL的对比。
有谁知道区别是什么吗?我应该使用哪一个(当从PL/pgSQL过程调用过程时)?

jucafojl

jucafojl1#

CALL是用于执行**PROCEDURESQL命令,在添加SQL过程时随Postgres 11一起添加。示例:

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命令。但是,引用USING子句的参数符号只能用作DML命令SELECTINSERTUPDATEDELETEMERGE中的数据元素(这些符号不能用于代替表名等)。
除非添加INTO子句,否则结果将自动丢弃。
你不能CALL一个函数。
不能对过程执行SELECTPERFORM操作。
不能使用PERFORMEXECUTE,也不能使用EXECUTEPERFORM,这两个命令都不是SQL命令。

  • db〈〉小提琴here *

相关:

  • PL/pgSQL执行与执行
  • 在PL/pgSQL中循环给定的值列表

相关问题