У меня есть две таблицы. Билеты, в которых есть столбцы: ticketid, startdate, enddate
и транзакции, в которых есть столбцы: transactionid, ticketid (fk to tickets), ticketcost. Я хочу создать триггер на тикетах, который делает скидку на costcost транзакций (транзакций таблицы) всякий раз, когда обновляется конечная дата тикета. транзакции могут иметь один и тот же тикет.
Мне удалось создать триггер, который выполнял то, что я описал, но не только для одного билета, для которого была изменена дата, но и для каждого билета таблицы билетов.
первая попытка:
create or replace function changeDate() returns trigger as $changeDate$
BEGIN
IF new.enddate != old.enddate THEN
update transactions
set ticketcost = ticketcost - ticketcost*0.1
from tickets
where tickets.ticketid= transactions.ticketid;
END IF;
return new;
END
$changeDate$ LANGUAGE plpgsql;
CREATE TRIGGER changeDate after UPDATE ON tickets
FOR EACH ROW EXECUTE FUNCTION changeDate();
Это явно не удалось, потому что это делается для каждой строки, поэтому каждый тикет обновляется.
То, что у меня сейчас есть, это:
create or replace function changeDate() returns trigger as $changeDate$
Declare
arg1 integer;
BEGIN
IF new.enddate != old.enddate THEN
update transactions
set ticketcost = ticketcost - ticketcost*0.1
from tickets
where arg1 = transactions.ticketid;
END IF;
return new;
END
$changeDate$ LANGUAGE plpgsql;
CREATE TRIGGER changeDate after UPDATE ON tickets
FOR EACH ROW
WHEN (new.enddate != old.enddate)
EXECUTE FUNCTION changeDate(tickets.ticketid);
Я пытался передать только идентификатор заявки с разными новыми и старыми датами. Запрос работает, но ничего не изменилось. В основном я пытаюсь найти способ передать идентификатор заявки, у которой была конечная дата поле изменилось. В приведенном выше примере я пытаюсь передать его как переменную, когда возникает условие, которое я описал. Любая помощь будет принята, поскольку я не могу найти решение.