Я пытаюсь создать функцию / триггер, который работает между двумя таблицами, курсами и зачислением, используя postgresql.Когда в таблицу регистрации добавляется новая строка, триггер должен обновить соответствующее зарегистрированное значение в таблице курсов и установить для открытой статистики значение false, если оно заполнено.
Я пытался выбрать соответствующий курс иззарегистрируйте таблицу и обновите соответствующую таблицу, используя следующие коды:
Таблицы:
create table students (
id integer primary key,
name varchar(24)
);
create table courses (
num varchar(6) primary key,
open boolean not null,
enrolled integer default 0,
lim integer default 3
);
create table enrollment (
student integer references students(id),
course varchar(6) references courses(num)
);
Функция и триггер:
create or replace function func_1() returns trigger as
$$
declare
enrol integer;
limt integer;
begin
select enrolled into enrol from courses where num = (select course from enrollment where course = new.course);
select lim into limt from courses where num = (select course from enrollment where course = new.course);
if enrol<limt then
update courses set enrolled = enrol+1 where num = (select course from enrollment where course = new.course);
if enrol = limt-1 then
update courses set open = False where num = (select course from enrollment where course = new.course);
end if;
end if;
return new;
end;
$$ language plpgsql;
create trigger trigger_1
after insert
on enrollment
execute procedure func_1();
Предположим, что следующие данные были вставлены втаблица студентов и курсов:
insert into students values(1, 'Alice');
insert into students values(2, 'Bob');
insert into courses values('CS1555', True);
insert into courses values('CS1501', True);
Когда я запускаю это:
insert into enrollment values(1, 'CS1501');
Он вставляется в таблицу регистрации, но не обновляет соответствующие строки в таблице курсов, зачисленные оцениваютсяне получил + 1.
Я также попытался заменить
where num = (select course from enrollment where course = new.course)
на
where num in (select course from enrollment)
в триггере, но если я это сделаю, он обновит всестроки в таблице курсов (все зарегистрированные значения получили +1), а не соответствующие.
Пожалуйста, дайте мне знать, как я могу правильно обновить соответствующие значения, спасибо!