在PL/pgSQL上perform和execute有什么区别?
从手册中:
有时,对表达式求值或选择查询但放弃结果是有用的,例如,在调用具有副作用但没有有用结果值的函数时。要在PL/pgSQL中执行此操作,请使用PERFORM语句。
但是,当我尝试像这样的事情时:
perform 'create table foo as (select 1)';
什么都没发生。尽管这个查询应该有副作用(创建表),而且结果可以被丢弃。
我想我有一件事是对的:为了运行我可以使用perform的函数:
perform pg_temp.addInheritance(foo);
最佳答案:
PERFORMSELECTSELECTINTOSQLSELECTPERFORMCREATE 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命令时。