2011-12-05 73 views
2

在Postgres中可以做成這樣的東西嗎?如何在plpgsql中使用變量作爲字段名稱

DECLARE variable VARCHAR 
BEGIN 
    variable := TG_RELNAME || '_id'; 
    OLD.variable = 123; 
END; 

我不能使用變量作爲FIELD_NAME的值...

附:我的db版本是8.4。

+0

沒有,這種觸發可用於刪除一行。 'DELETE FROM alerts WHERE item_table = TG_RELNAME AND item_id = OLD。{field_name_from_variable_value}' – sigra

回答

1

據我知道,要做到這一點的唯一方法是使一個額外的查詢,例如

execute 'update ' || TG_RELNAME || ' set ' || variable ||' = 123'; 
+0

注意,這可能是一個壞主意(它會導致額外的膨脹或競爭條件)。有一些工作就像使用非plpgsql觸發器函數一樣,但可能要做的只是對函數進行硬編碼。 – xzilla

+2

您應該使用'quote_ident()'函數引用'TG_RELNAME'和'variable',以避免語法錯誤,如果它們包含「異常」字符:'execute'update'|| quote_ident(TG_RELNAME)|| 'set'|| quote_ident(變量)||' = 123';' – IMSoP

相關問題