2016-11-17 3 views
1

Практика вопрос иностранного выглядит следующим образом:Использование триггера вместо ключа

Реализация триггеров, которые выполняют ту же функцию, что и следующие ограничения внешнего ключа:

ALTER TABLE Sample ADD CONSTRAINT sample_fk 
FOREIGN KEY (tissue_type_id) 
    REFERENCES Tissue_Type(tissue_type_id); 

Где tissue_type_id является атрибутом в обеих таблицах Sample и tissue_type.

После формата от

Using a trigger to implement a foreign key check constraint

До сих пор у меня есть:

CREATE OR REPLACE TRIGGER tissue_type_inck 
BEFORE INSERT ON SAMPLE 
FOR EACH ROW 
BEGIN 
    DECLARE 
    tissueType tissue_type.tissue_type_id%TYPE; 

    SELECT TISSUE_TYPE_ID 
     INTO tissueType 
    FROM TISSUE_TYPE 
    WHERE TISSUE_TYPE_ID=:NEW.TISSUE_TYPE_ID; 

    IF :NEW.TISSUE_TYPE_ID != tissueType THEN 
     RAISE_APPLICATION_ERROR(-20001,'INVALID TISSUE TYPE'); 
    END IF; 
END; 
/

Я получаю ошибку компиляции:

Warning: Trigger created with compilation errors.

Где я буду неправильно? Извините за форматирование и спасибо!

+0

Хорошо, я вам на самом деле на Oracle, я сделал обновление моего поста – Blag

+1

После устранения триггера для вставки, не забудьте внешние ключи также связаны с обновлениями (а также с обновлениями и удалениями в таблице PK). – mathguy

ответ

0
BEGIN 
DECLARE 
    tissueType tissue_type.tissue_type_id%TYPE; 

Это другой способ:

DECLARE 
    tissueType tissue_type.tissue_type_id%TYPE; 
BEGIN