У меня есть две простые таблицы в Oracle SQL Developer (Train and Driver), каждый из которых имеет общий атрибут (driverid). По сути, я хочу не допускать никаких обновлений для конкретного кортежа драйверов в таблице драйверов, если их атрибут driverid существует в таблице поездов. Я попытался добавить следующее ограничение, однако он отбрасывает ошибку «подзапрос, который здесь не разрешен».Oracle SQL Check Exists Constraint
alter table driver add constraint drivcheck CHECK
(NOT EXISTS(select driverid from train))
Я сделал немного копать вокруг и общее ощущение, что это условие должно быть проверено с триггером, так что я попытался создать триггер, чтобы сделать работу, но не имея большого успеха. Следующий триггер - это то, что я уже придумал.
create trigger drivcheck4
before update on driver
for each row
begin
declare
cursor dri is
select driverid from train where 'N' IN
(select availability
from driver
inner join train on driver.driverid=train.driverid
);
dri2 NUMBER;
begin
open dri;
loop
fetch dri into dri2;
exit when dri%NOTFOUND;
if check (exists (select * from dri2)) THEN
//Throw Error Section
else
//Allow update operation to take place
end if;
end loop;
close dri;
end;
Я знаю, что триггер может выполнять что-то другое, отличное от описанного, но это только результат экспериментов. Мое первоначальное описание - это то, чего я пытаюсь достичь. Если у кого есть какие-то мысли, я был бы очень благодарен!
Какие поля находятся в таблице драйверов? Вы хотите предотвратить их обновление, если они назначены на поезд? –
Это две таблицы и их атрибуты. – Reidacus
создать таблицу драйвера (номер драйвера ID) (5) ПЕРВИЧНЫЙ КЛЮЧ, FName VARCHAR (20), LName VARCHAR (20), адрес VARCHAR (30), DOB DATE, Tel_Num VARCHAR (11), доступность CHAR (1) CONSTRAINT driverAvail Check (Доступность = 'Y' ИЛИ Доступность = 'N')) – Reidacus