2011-10-07 45 views
1

我有以下觸發功能:前PostgreSQL的更新/插入觸發器不會出現工作

CREATE OR REPLACE FUNCTION update_modelname_function() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    IF tg_op = 'INSERT' THEN 
    new.model_name := upper(new.model_name); 
    RETURN new; 
    END IF; 
    IF tg_op = 'UPDATE' THEN 
    old.model_name := upper(old.model_name); 
    RETURN new; 
    END IF; 
END 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

我試圖實現是列MODEL_NAME的值時,它總是被大寫堅持在桌子上。但似乎沒有發生。有任何想法嗎?

回答

5

您意外更新了old而不是new。嘗試:

CREATE OR REPLACE FUNCTION update_modelname_function() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    IF tg_op = 'INSERT' THEN 
    new.model_name := upper(new.model_name); 
    RETURN new; 
    ELSIF tg_op = 'UPDATE' THEN 
    new.model_name := upper(new.model_name); 
    RETURN new; 
    END IF; 
END 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

如果示例顯示了整個代碼,實際觸發(S)僅在INSERT和/或火災UPDATE可以進一步簡化:

CREATE OR REPLACE FUNCTION update_modelname_function() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 

new.model_name := upper(new.model_name); 
RETURN new; 

END 
$BODY$ 
    LANGUAGE plpgsql VOLATILE; 
+0

福氣! ... –

+0

謝謝你 - 我會試試看。 –