首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -触发器“不在”

SQL -触发器“不在”
EN

Stack Overflow用户
提问于 2015-01-09 18:57:00
回答 3查看 722关注 0票数 0

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

和CDM

我是SQL的乞讨者,但我知道在表'DUBBES‘中应该有一些触发器。我试着做这样的事情,但我收到一条消息,提示触发器无效:

代码语言:javascript
复制
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;
/

我真的很感谢任何人的帮助。首先要感谢大家!

EN

回答 3

Stack Overflow用户

发布于 2015-01-09 19:25:40

我认为你的代码应该是这样的:

代码语言:javascript
复制
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;
/
票数 2
EN

Stack Overflow用户

发布于 2015-01-09 19:41:35

从你的图表来看,你不需要一个触发器。如果您将FK_DUBBES_DUBBES3_CHARACTE外键重新定义为引用APPEARS.CHAR_ID而不是直接针对CHARACTER.ID_CHARACTER,那么将强制执行该要求,而不会产生触发器的额外开销。

票数 2
EN

Stack Overflow用户

发布于 2015-01-09 19:16:17

DECLARE后缺少Begin关键字

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27859014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档