2014-01-09 6 views
0

트리거를 만드는 데 어려움이 있습니다. 여기 내 코드가있다. 나는 2 테이블을 만듭니다 :Oracle에서 트리거를 만들 때 오류가 발생했습니다.

CREATE TABLE client_table 
    (
    clientid NUMBER(6) PRIMARY KEY, 
    lastname varchar2(50) NOT NULL, 
    firstname varchar2(50) NOT NULL, 
    password varchar2(20) NOT NULL, 
    email varchar2(100) NOT NULL, 
    phoneno NUMBER(12) NOT NULL, 
    zipcode NUMBER(6) NOT NULL , 
    street varchar2(60) NOT NULL, 
    CHECK (email LIKE '%@%.%') 
); 

CREATE TABLE location_table 
(
    zipcode NUMBER(6) PRIMARY KEY, 
    country varchar2(100) NOT NULL, 
    region varchar2(60) NOT NULL, 
    town varchar2(60) NOT NULL 
); 

클라이언트 테이블의 zipcode가 외래 키가되도록 제약 조건을 추가했습니다.

ALTER TABLE client_table 
ADD CONSTRAINT clirefzip 
    FOREIGN KEY(zipcode) REFERENCES location_table(zipcode) 
    DEFERRABLE INITIALLY DEFERRED; 

지금 내가 location_table에서 위치를 삭제하면되도록 트리거를 추가하려면, 그것을 삭제 된 위치와 동일한 우편 번호를 client_table의 모든 클라이언트를 삭제합니다. 그래서 다음과 같이 시도해 보겠습니다.

CREATE OR REPLACE TRIGGER location_delete 
AFTER DELETE ON location_table 
REFERENCING OLD AS old_buffer 
FOR EACH ROW 
DELETE FROM client_table WHERE zipcode = old_buffer.zipcode; 

불행히도 작동하지 않습니다.

+1

"* 작동하지 않습니다 *"는 허용되는 오류 설명이나 유효한 Oracle 오류 메시지가 아닙니다. 그러나 외래 키를 "삭제 삭제 캐스케이드"로 선언하면 어떨까요? –

+0

그래서 내가해야 할 일은 다음과 같이 내 제약 조건을 작성하는 것입니다. foreign key (zipcode) delete cascade에 location_table (zipcode)을 참조 하시겠습니까? – Zan

+0

Thx 많은 사람. 그것은 잘 작동했습니다. 간단하고 효과적입니다. 내 지저분한 게시물을 유감으로 여긴다. 나는 초보자이다. 나는 다음 번에 질문을 게시 할 때 좀 더 자세하게하려고 노력할 것이다. – Zan

답변

0
Hi there has some syntactical errors in your code. I hope this code works . Thanks  

    CREATE OR REPLACE TRIGGER location_delete 
    AFTER DELETE ON location_table 
    --REFERENCING OLD AS old_buffer 
    FOR EACH ROW 
    begin 
    DELETE FROM client_table WHERE zipcode = zipcode; 
    end location_trigger; 
+0

이것을 시도하지 마십시오 !!! "zipcode = zipcode"는 항상 true로 평가됩니다! 전체 하위 테이블 (또는 적어도 zipcode가 null이 아닌 모든 레코드)을 삭제하려고합니다. –

+0

DELETE FROM client_table WHERE zipcode = : OLD.zipcode; –

관련 문제