Postgresql
將字元串作為表名和列名的函式
我正在嘗試編寫一個函式,該函式將
participation
根據表中存在的 id 在survey_name
表中創建一個新列:CREATE OR REPLACE FUNCTION survey_participated(_sn text) returns void AS $func$ BEGIN EXECUTE format($$ALTER TABLE participation ADD COLUMN %I integer DEFAULT 0$$,_sn); EXECUTE format($$UPDATE TABLE participation SET %I = 1 WHERE participation.participant_id = %I.participant_id$$,_sn,_sn); END $func$ LANGUAGE plpgsql;
我不斷收到錯誤:
[2017-10-19 12:38:09] [42601] ERROR: syntax error at or near "TABLE" [2017-10-19 12:38:09] Where: PL/pgSQL function survey_participated(text) line 4 at EXECUTE
有人可以指出我的錯誤嗎?
第一個問題是 for 的語法
UPDATE
不允許使用可選的TABLE
after。只是不需要。UPDATE
只在桌子上操作;ALTER
適用於許多目標。第二個問題是應該是%s
(文字/字元串)而不是%I
(標識符)。EXECUTE format( $$ALTER TABLE participation ADD COLUMN %I integer DEFAULT 0;$$, _sn ); EXECUTE format( $$ UPDATE participation SET %I = 1 WHERE participation.participant_id = quote_literal(%s||participant_id); $$, _sn, _sn );
話雖如此,這似乎是一個可怕的想法。您正在向表中添加一列,並將該列的值設置為“colname+id”?這有什麼用?