2011-10-07 44 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

谢谢你 - 我会试试看。 –