트리거를 만드는 데 어려움이 있습니다. 여기 내 코드가있다. 나는 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;
불행히도 작동하지 않습니다.
"* 작동하지 않습니다 *"는 허용되는 오류 설명이나 유효한 Oracle 오류 메시지가 아닙니다. 그러나 외래 키를 "삭제 삭제 캐스케이드"로 선언하면 어떨까요? –
그래서 내가해야 할 일은 다음과 같이 내 제약 조건을 작성하는 것입니다. foreign key (zipcode) delete cascade에 location_table (zipcode)을 참조 하시겠습니까? – Zan
Thx 많은 사람. 그것은 잘 작동했습니다. 간단하고 효과적입니다. 내 지저분한 게시물을 유감으로 여긴다. 나는 초보자이다. 나는 다음 번에 질문을 게시 할 때 좀 더 자세하게하려고 노력할 것이다. – Zan