PERFORM
是用于调用void函数的plpgsql命令.PLpgSQL小心处理无用的SELECT
语句——不允许使用SELECT
without INTO
子句.但有时您需要调用一个函数,而不需要存储结果(或者函数没有结果).SQL
中的函数用SELECT
语句调用.但这在PLpgSQL中是不可能的——因此引入了命令PERFORM
.
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
RAISE NOTICE 'Hello from void function';
END;
$$ LANGUAGE plpgsql;
-- direct call from SQL
SELECT foo();
-- in PLpgSQL
DO $$
BEGIN
SELECT foo(); -- is not allowed
PERFORM foo(); -- is ok
END;
$$;
这PERFORM
条语句执行一个参数并忘记了结果.
你的例子perform 'create table foo as (select 1)';
和SELECT 'create table foo as (select 1)'
差不多.它返回一个字符串"create table foo as( Select 1)",该字符串将被丢弃.
计算字符串以得到表达式EXECUTE
.在下一步中,将执行该字符串.
所以EXECUTE 'create table ' || some_var || '(a int)';
有两个步骤
- 计算表达式
'create table ' || some_var || '(a int)'
- 例如,如果
some_var
是mytab,则执行命令create table mytab(a int)
当函数未在赋值语句中使用时,PERFORM
语句用于函数调用.EXECUTE
用于判断动态SQL——当运行时已知SQL命令的形式时.