2个表上的Oracle触发器:未找到任何数据

时间:2017-12-28 20:48:42

标签: oracle plsql triggers

请帮助,我试图允许/禁止插入名为'vol'的表,该表具有来自另一个表'avion'的外键(id_av)

  • 允许插入:if avion.etat ='disponible'
  • 禁止它,如果它与'disponible'不同 因为我创造了这个触发器:

    create or replace trigger t
    before insert on vol 
    declare etat VARCHAR(10);
    BEGIN 
    select avion.etat into etat 
    from vol,etat
    where avion.id_av = vol.id_av;
    IF(etat <> 'disponible') 
    THEN 
    RAISE_APPLICATION_ERROR( -20001, 'insertion imposible');
    END IF;
    END t;
    / 
    

    结果:触发器已创建,但当我尝试插入vol时,它会向我显示这些错误enter image description here

我也尝试过JOIN..ON,但没有真正解决

1 个答案:

答案 0 :(得分:2)

也许是这样的?

create or replace trigger t
  before insert on vol 
  for each row          --> edited
declare 
  etat VARCHAR(10);
BEGIN 
  -- MAX will prevent NO-DATA-FOUND 
  -- Also, you don't need join - use :NEW.ID_AV which is equal to currently inserted value
  select max(avion.etat)
  into etat 
  from avion
  where avion.id_av = :new.id_av;

  -- NVL because - if SELECT returns, nothing, you can't compare NULL with 'disponible'
  IF nvl(etat, 'x') <> 'disponible'
  THEN 
    RAISE_APPLICATION_ERROR( -20001, 'insertion imposible');
  END IF;
END t;
/