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

실수로 new 대신 old을 업데이트했습니다. 예제 전체 코드가 표시되면

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; 

을, 실제 트리거 (들) 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

그 덕분에 - 나는 그것을 밖으로 시도합니다. –