2个表上的Oracle触发器:未找到数据
请帮助,我正在尝试允许/禁止插入到名为“vol”的表中,该表具有来自另一个表“avion”的外键id_av 允许插入:如果avion.etat='disponable' 如果它与“可争议”不同,则禁止它 为此,我创建了此触发器:2个表上的Oracle触发器:未找到数据,oracle,plsql,triggers,Oracle,Plsql,Triggers,请帮助,我正在尝试允许/禁止插入到名为“vol”的表中,该表具有来自另一个表“avion”的外键id_av 允许插入:如果avion.etat='disponable' 如果它与“可争议”不同,则禁止它 为此,我创建了此触发器: create or replace trigger t before insert on vol declare etat VARCHAR(10); BEGIN select avion.etat into etat from vol,etat where avi
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;
/
也许是这样的
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;
/
我尝试了您的建议,但它显示了一个错误:表级triggerRight中不允许使用新的或旧的引用;我错过了每一排的比赛;看看编辑过的代码,这是第三行。我尝试了你的建议,结果显示了一个错误:表级triggerRight中不允许使用新的或旧的引用;我错过了每一排的比赛;看看编辑过的代码,这是第三行。