selectした値をテーブル名にして動的にupdateする即時実行PL/pgSQL
あとで使うためのメモです。
DBメンテナンス作業時、流用できると思います。
PL/pgSQLの文法はPascal/Dephiと似ていますね...
/* テストテーブルを作成 */ drop table if exists hoge; create table hoge(col1 varchar, col2 varchar); insert into hoge (col1, col2) values ('a', '1'); insert into hoge (col1, col2) values ('a', '2'); insert into hoge (col1, col2) values ('a', '3'); select col2 from hoge where col1 = 'a'; drop table if exists foo1; create table foo1(flg varchar); insert into foo1 (flg) values ('1'); insert into foo1 (flg) values ('2'); insert into foo1 (flg) values ('3'); select * from foo1; drop table if exists foo2; create table foo2(flg varchar); insert into foo2 (flg) values ('1'); insert into foo2 (flg) values ('2'); insert into foo2 (flg) values ('3'); select * from foo2; drop table if exists foo3; create table foo3(flg varchar); insert into foo3 (flg) values ('1'); insert into foo3 (flg) values ('2'); insert into foo3 (flg) values ('3'); select * from foo3; /* hoge.col2をテーブル名として、updateを行う即時実行PL/pgSQL。 */ do $outer$ declare rec record; tbl text; begin for rec in select col2 from hoge where col1 = 'a' order by 1 loop tbl := 'foo' || rec.col2; raise info 'table name: %', tbl; execute 'update ' || tbl || ' set flg = ''0'' ' ; end loop; end; $outer$; /* 結果: INFO: table name: foo1 INFO: table name: foo2 INFO: table name: foo3 DO */