2个表上的Oracle触发器:未找到任何数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2个表上的Oracle触发器:未找到任何数据相关的知识,希望对你有一定的参考价值。
请帮助,我试图允许/禁止插入名为'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时,它显示了这些错误
我也尝试过JOIN..ON,但没有真正解决
答案
也许是这样的?
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个表上的Oracle触发器:未找到任何数据的主要内容,如果未能解决你的问题,请参考以下文章