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

问题描述 投票:0回答:1

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

  • 允许插入:if airplane.state ='available'
  • 禁止它,如果它与'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,但没有真正解决

oracle plsql triggers
1个回答
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;
/ 
© www.soinside.com 2019 - 2024. All rights reserved.