少し複雑なシナリオがあります。名前とフィールドがユーザーによって定義されるテーブルを作成したいと思います。テーブルの名前を設定するのはそれほど難しいことではありませんが、テーブルには 2 つのフィールドと別の 5 つのフィールドを別の名前で設定することができます。pl/pgsqlでこの仕事をしたいです。pl/pgsqlでそれを行うことは一般的に可能ですか? 最初にフィールドの数を読み取ってから、それぞれのフィールドの名前を読み取ることは可能ですか? ヒントを教えてください。
質問する
976 次
1 に答える
1
次のような関数を使用します。
CREATE OR REPLACE FUNCTION mktable(tabname TEXT, fields TEXT[])
RETURNS VOID AS $$
DECLARE
q TEXT := '';
BEGIN
q := 'CREATE TABLE ' || quote_ident(tabname) || ' ( ';
for i in array_lower(fields, 1) .. array_upper(fields, 1) loop
q := q || quote_ident(fields[i]) || ' TEXT ';
if i <> array_upper(fields, 1) then
q := q || ',';
end if;
end loop;
q := q || ' ) ';
raise notice 'Running query: ';
raise notice '%', q;
execute q;
END;
$$ LANGUAGE PLPGSQL;
次のように実行できます。
SELECT mktable('tab1', ARRAY['a', 'b', 'ccc', 'd d']);
そして、あなたはテーブルを持っています:
Table "public.tab1"
Column | Type | Modifiers
--------+------+-----------
a | text |
b | text |
ccc | text |
d d | text |
于 2013-01-08T20:52:42.077 に答える