首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个表上的Oracle触发器:未找到数据

问两个表上的Oracle触发器:未找到数据
EN

Stack Overflow用户
提问于 2017-12-28 20:48:41
回答 1查看 59关注 0票数 0

请帮助,我正在尝试允许/禁止插入一个名为“vol”的表,该表有一个外键(id_av)来自另一个表“avion”

  • 允许插入:如果avion.etat =“disponible”
  • 如果它不同于“可分解”(Disponible),请禁止它,因为我创建了这个触发器: 在VARCHAR(10)上插入之前创建或替换触发器t;开始从Vol.ETAT中选择avion.etat到etat,其中avion.id_av = vol.id_av;如果( etat <> 'disponible')那么RAISE_APPLICATION_ERROR( -20001,‘插入不确定’);结束IF;结束t;/ 结果是:创建了触发器,但当我尝试在第一卷中插入时,它会显示这些错误。

​

我也试过用JOIN..ON,但没能真正锻炼出来

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-28 21:06:57

也许是这样的?

代码语言:javascript
复制
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;
/ 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48014191

复制
相关文章

相似问题

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