动态改变PL / pgSQL RECORD列的值

时间:2012-07-20 14:38:35

标签: postgresql plpgsql

我有一个Postgresql PL / pgSQL函数,它有一个双嵌套FOR循环,我想动态设置列名。但是我找不到以编程方式访问RECORD列的方法。

我将直接跳到一些代码示例:

FOR loop_helper1 IN SELECT
  id, name1, name2, name3, nameN,
  FROM table1
  LOOP
    FOR loop_helper2 IN SELECT name FROM table2 LOOP
      -- I want to set values of columns in loop_helper1,
      -- with the column name given by loop_helper2.name
      -- An EXECUTE would not allow me to do this:
      EXECUTE 'loop_helper1.' || loop_helper2.name || ':= function_call(123);'
      -- (Eg. 'loop_helper1.name2 := function_call(123);')
      -- However, this produces: ERROR:  syntax error at or near "loop_helper1"
    END LOOP;
END LOOP;

有什么想法吗?

肯定有办法做到这一点,但我似乎无法找到它。所有的帮助和建议表示赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

我想你可能想要我们在this related question下设计的功能 使用此函数,您的代码片段可能如下所示:


FOR loop_helper1 IN
    SELECT id, name1, name2, name3, nameN,
    FROM   table1
LOOP
    FOR loop_helper2 IN
        SELECT name
        FROM   table2
    LOOP
       loop_helper1 := public.setfield (loop_helper1
                                      ,loop_helper2.name
                                      ,function_call(123));
    END LOOP;
END LOOP;

可能有更简单的方法,特别是如果你想分配一个完整的复合类型......