1

列名を動的に設定したい、二重にネストされたFORループを持つPostgresql PL/pgSQL関数があります。ただし、プログラムで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;

何か案は?

確かにこれを行う方法はありますが、私はそれを見つけることができないようです。すべてのヘルプと提案をいただければ幸いです。ありがとう。

4

1 に答える 1

1

この関連する質問の下で私たちが考案した関数がおそらく必要だと思います。
この関数を使用すると、コードフラグメントは次のようになります。


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;

特に複合型全体を割り当てたい場合は、もっと簡単な方法があるかもしれません...

于 2012-07-20T15:07:13.600 に答える