2011-12-20 2 views
2

나는 다음과 같은 간단한 예에서와 같이 트리거를 작성하려고 오전 :informix에서 트리거를 만드는 방법은 무엇입니까?

create trigger adr_trg update of fname, lname on adr 
REFERENCING OLD AS o NEW AS n 
FOR EACH ROW 
(
    IF o.fname <> n.fname THEN 
    insert into adrlog (old_value, new_value) 
    values (o.fname, n.fname); 
    END IF; 

    IF o.lname <> n.lname THEN 
    insert into adrlog (old_value, new_value) 
    values (o.lname, n.lname); 
    END IF; 
) 

이 실패!

만이 작동 : 내가 잘못 뭐하는 거지

create trigger adr_trg update of fname, lname on adr 
REFERENCING OLD AS o NEW AS n 
FOR EACH ROW 
(
    insert into adrlog (old_value, new_value) 
    values (o.fname, n.fname); 
) 

?

답변

3

IF- THEN 논리를 가진 저장 프로 시저를 작성하고이 트리거에서 호출해야한다고 생각합니다. 나는 트리거는 단순한 SQL 문이 아니라 SPL 문

을 지원하는 생각

편집 :

CREATE PROCEDURE proc1() 
REFERENCING OLD AS o NEW AS n FOR tab1; 
....your logic 


CREATE TRIGGER adr_trg update of fname, lname on adr 
REFERENCING OLD AS o NEW AS n 
    FOR EACH ROW(EXECUTE PROCEDURE proc1() WITH TRIGGER REFERENCES); 
+0

그래, 난 당신이 옳다고 생각한다. 슬프지만 사실이지만, Informix s * cks ... – PeterP

+0

좋은 거래 인은 결코 자신의 도구를 탓하지 않습니다. 조건부 논리는 절차에 가장 적합하다고 생각됩니다. OO 방식으로 여러 테이블에 사용할 수 있다는 것을 충분히 일반적으로 증명할 수 있습니다. 귀하의 단순화 된 예제는 확실히 이것을 제안합니다. – RET

+0

[관련 참조 페이지는 다음과 같습니다.] (http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.sqls.doc/sqls521.htm) –

2

오래된 질문,하지만 난처럼 잘 대답 경우에 사람이 여기에 토지 없습니다.

인포믹스는 요청 된 기능을 처리하지만, 구문은 다릅니다

create trigger adr_trg update of fname,lname on adr 
referencing old as o new as n 
    for each row 
    when (o.fname != n.fname) 
    (
     insert into adrlog (old_value,new_value) 
     values (o.fname,n.fname) 
    ) , 
    when (o.lname != n.lname) 
    (
     insert into adrlog (old_value,new_value) 
     values (o.lname,n.lname) 
    ) 
; 
관련 문제