2013-04-23 1 views
0

예를 들어 한 테이블에서 행을 삭제하면 해당 테이블의 항목에 연결됩니다. 이 트리거는 첫 번째 테이블에서 삭제할 때이 두 번째 테이블 (해당 외래 키가 일치하는 경우)에서 튜플을 삭제해야합니다. 즉, 계단식 삭제입니다. 계단식 삭제 옵션을 테이블에 추가 할 수 없다고 가정합니다.별도의 테이블에서 해당 튜플을 삭제하는 트리거를 만드는 방법은 무엇입니까?

CREATE OR REPLACE TRIGGER delCascade 
    BEFORE DELETE ON student 
    REFERENCING OLD AS oldRow 
    FOR EACH ROW  
BEGIN 
    DELETE FROM taking 
    WHERE taking.studentnum = oldRow.studentnum; 
END; 
/

내가 경고가 계속 :

Warning: Trigger created with compilation errors. 
+0

이러한 컴파일 오류에 대한 추가 정보를 얻을 수 없습니까? – Thilo

+0

더 많은 정보를 얻는 방법이 있다면, 나는 그것에 대해 모른다. 그러나 오라클을 고려할 때, 더 구체적이지는 않다고 가정 할 수 있습니다. –

+2

훨씬 더 구체적 일 것입니다. 경고를 받으면 '오류 표시'를 수행하고 실제 오류와 오류가있는 행 번호를 알려줍니다. 당신은'oldRow' 전에':'를 놓치고 있습니다. –

답변

2

CREATE OR REPLACE TRIGGER delCascade 
    BEFORE DELETE ON student 
    REFERENCING OLD AS oldRow 
    FOR EACH ROW  
BEGIN 
    DELETE FROM taking 
    WHERE taking.studentnum = :oldRow.studentnum; 
END; 
+0

글쎄, 그건 분명히 경고를 없앴다! 이제 마침내 그것이 의도 한대로 작동하는지 테스트 할 수 있습니다. 세계에서 단두대 결장이 무엇이고 필요한 이유가 무엇인지 자세히 설명해 주시겠습니까? –

+1

@ TheReationalist, 여기 당신이 오래된 변수 값을 접근하고 있으며, 오라클의 모든 바인드 변수에서 이전과 새로운 한정자는':'로 시작해야합니다 –

0

을 감안할 때 시도를 내가 여기에 오라클/SQL Plus를 사용하고

내 시도이다

STUD(rollno, name, birthdate) 
RESULT(rollno, marks) 

1) 학생 기록이 삭제되면 RESULT 표에서 모든 관련 기록을 삭제하는 방아쇠를 작성하십시오.

create or replace trigger del_trg 
after delete on stud_trg 
for each row 
begin 
    if deleting then 
     delete from result where stud_trg.rollno=result.rollno; 
    end if; 
end;  
관련 문제