在PL/pgSQL上执行和执行有什么区别?
从手册:
有时,评估表达式或SELECT查询但丢弃结果很有用,例如在调用具有副作用但没有有用结果值的函数时.要在PL/pgSQL中执行此操作,请使用PERFORM语句.
但是,当我尝试这样的事情时:
perform 'create table foo as (select 1)';
Run Code Online (Sandbox Code Playgroud)
什么都没发生.虽然此查询应该有副作用(创建表),但结果可以被丢弃.
我想我有一件事是正确的:为了运行我可以使用的函数:
perform pg_temp.addInheritance(foo);
Run Code Online (Sandbox Code Playgroud) 我正在尝试遍历几个字段并在它们上运行一个函数:
FOR field IN ARRAY['f1','f2'] LOOP
execute pg_temp.converFieldToLower(newTableNameRaw,field)
END LOOP;
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试使用的功能:
CREATE OR REPLACE FUNCTION pg_temp.converFieldToLower(t varchar, f varchar) RETURNS void AS $$
#variable_conflict use_variable
BEGIN
EXECUTE concat_ws (' ', 'UPDATE',t,'SET',f,'= LOWER(',f,')');
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
看起来这不是声明数组的正确方法,我做错了什么?
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "ARRAY" LINE 49: FOR field IN ARRAY['f1','f2'] LOOP