1
안녕하세요, 제 데이터베이스에서 트리거를 만드는 데 문제가 있습니다.ORACLE 트리거 검사 표 및 행 삭제
- 나라
- 도시
- 지방
- 호수
- 바다
- 강
그래서 :
나는 '위치'를 포함 명명 된 것 표를 호수 , 바다와 강은 외래 키입니다.
ALTER TABLE located
ADD CONSTRAINT locatedLake
FOREIGN KEY (lake)
REFERENCES Lake(name)
ON DELETE SET NULL;
ALTER TABLE located
ADD CONSTRAINT locatedRiver
FOREIGN KEY (river)
REFERENCES River(name)
ON DELETE SET NULL;
ALTER TABLE located
ADD CONSTRAINT locatedSea
FOREIGN KEY (sea)
REFERENCES Sea(name)
ON DELETE SET NULL;
그래서 때마다 나는 그것을 NULL로 설정되어 위치에있는 호수, 강 또는 바다를 삭제 :
나는이 세 가지 제약 조건을 만들었습니다.
는 지금이 트리거를 만들려고 :
CREATE OR REPLACE TRIGGER deleteFromLocated
AFTER UPDATE ON located
FOR EACH ROW
BEGIN
DROP FROM located WHERE sea IS NULL AND river IS NULL AND lake IS NULL;
END;
/
을하지만 그때 나는 돌연변이의 오류가 발생합니다.
목표는이 세 가지가 null 인 모든 튜플을 삭제하는 것입니다.
누군가 나를 도울 수 있습니까? 당신이 :new
또는 :old
가 특정 행이 갱신되고 처리하나요 사용하지 않는 때문에 사전에
덕분에
왜 이것을 트리거로 사용 하시겠습니까? 성능에 신경 쓰는 프로덕션 시스템을 가정하면 세 개의 트리거와 패키지 (또는 임시 테이블) 또는 여러 부분이있는 11g 복합 트리거가 필요합니다. 그것은 일반적으로 나쁜 해결책입니다. 3 개의 열 모두가 NULL이되는 것을 방지하는 제약 조건을 생성 한 다음 부모 테이블에서 삭제할 때'위치한 '행을 삭제하도록 응용 프로그램을 수정할 수 있습니까? –
이것은 강의를 위해 풀어야 할 과제입니다. 데이터베이스가 고정되어있어 트리거를 사용해야합니다. 우리는이 작업을 3 개의 트리거로 해결할 것입니다. 그러나,이 솔루션은 어떤 의미인지 불만족 스럽습니다. 제가 무슨 뜻인지 아시면 ... – Ennosigaeon