sql - SQL-触发 “not in”

标签 sql oracle triggers syntax-error

我正在尝试在配音数据库中触发时间。我想检查一下在不出现角色的电影配音中不能对角色进行配音。这是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;
/

我真的很感谢您的帮助。
提前谢谢了!

最佳答案

我认为您的代码应如下所示:

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;
/

关于sql - SQL-触发 “not in”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27859014/

相关文章:

sql - 使用 PrestoSQL 进行 32 位或 64 位浮点除法

oracle - 无法使用 Dapper 将 bool 值插入 Oracle

oracle - 无法使用jmeter JDBC连接配置连接到Oracle数据库

Oracle:用户数据中按循环连接

带条件和计算的 Mysql 触发器

sql - 用分隔符分隔字符串并分配给变量 - sql

c# - mySQL 从一个表中选择,从另一个表中加入,然后从新表中选择

MySQL 表示 : #1336 - Dynamic SQL is not allowed in stored function or trigger

mysql - 在 MariaDB 中,放置在触发器中的函数开始返回不同的值

android - SQLite 中的 SELECT 条目,没有 WHERE 条件?