我在试着在配音数据库里设置一个时间触发器。我想检查一下,在没有角色出现的电影配音中,角色不能配音。下面是PDM:

和CDM

我是SQL的乞讨者,但我知道在表'DUBBES‘中应该有一些触发器。我试着做这样的事情,但我收到一条消息,提示触发器无效:
CREATE OR REPLACE TRIGGER x_character
BEFORE INSERT OR UPDATE ON dubbes FOR EACH ROW
DECLARE
IF ( :NEW.CHAR_id_character NOT IN ( SELECT CHAR_id_CHARACTER
FROM APPEARS
WHERE APPEARS.MOV_id_movie = (SELECT dubbing.Mov_id_movie
FROM DUBBING
WHERE dubbing.id_dubbing = :NEW.dab_id_dubing)))
THEN
RAISE_APPLICATION_ERROR(-20000, 'Character is not in this movie.');
END IF;
END;
/我真的很感谢任何人的帮助。首先要感谢大家!
发布于 2015-01-09 19:25:40
我认为你的代码应该是这样的:
create or replace trigger X_character BEFORE INSERT OR UPDATE ON dubbes
FOR EACH ROW
DECLARE
haveit number;
idmovie number;
begin
select dubbing.Mov_id_movie into idmovie from DUBBING where dubbing.id_dubbing = :new.dab_id_dubing;
select count(*) into haveit from APPEARS
where
APPEARS.MOV_id_movie = idmovie and
APPEARS.CHAR_id_CHARACTER = :new.CHAR_id_character;
IF( haveit = 0 ) then
RAISE_APPLICATION_ERROR(-20000, 'Character is not in this movie.');
END IF;
END;
/发布于 2015-01-09 19:41:35
从你的图表来看,你不需要一个触发器。如果您将FK_DUBBES_DUBBES3_CHARACTE外键重新定义为引用APPEARS.CHAR_ID而不是直接针对CHARACTER.ID_CHARACTER,那么将强制执行该要求,而不会产生触发器的额外开销。
发布于 2015-01-09 19:16:17
DECLARE后缺少Begin关键字
https://stackoverflow.com/questions/27859014
复制相似问题