相关疑难解决方法(0)

PL/pgSQL执行vs执行

在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)

postgresql plpgsql

15
推荐指数
2
解决办法
2万
查看次数

循环遍历PL/pgSQL中给定的值列表

我正在尝试遍历几个字段并在它们上运行一个函数:

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)

看起来这不是声明数组的正确方法,我做错了什么?

ERROR:  syntax error at or near "ARRAY"
LINE 49:         FOR field IN ARRAY['f1','f2'] LOOP
Run Code Online (Sandbox Code Playgroud)

arrays postgresql loops plpgsql

6
推荐指数
2
解决办法
5314
查看次数

标签 统计

plpgsql ×2

postgresql ×2

arrays ×1

loops ×1