У меня есть TeraData
таблица, которая выглядит примерно так:
Name;Year;Amount
1. Bob;2018;20
2. Bob;2022;14
3. Joe;2019;40
4. Ben;2017;12
PK это Name
и Year
. У меня есть триггер, который не позволяет пользователю редактировать строку Year
на меньшее число. то есть изменение строки 3 с 2019 на 2018.
Этот триггер ниже:
Replace TRIGGER xyz.Month_Update
AFTER UPDATE OF Month ON xyz.table
REFERENCING OLD ROW as OldRow NEW ROW as NewRow
FOR EACH ROW
WHEN NewRow.Year < OldRow.Year
abort;
Теперь я хотел бы сделать что-то подобное для вставки.
Я хотел бы запретить пользователю вставлять новую строку в таблицу
если ..
- В таблице уже существует строка для одного и того же человека и
- Этот ряд (ы) имеет больший год, чем тот, который пользователь пытается ввести
т.е. Пользователь не может ввести Joe;2017;19
, но пользователь может ввести Joe;2020;19
Есть несколько очевидных проблем с триггером ниже, но он показывает общую идею:
Replace TRIGGER xyz.Month_Update
AFTER INSERT ON xyz.table
REFERENCING NEW ROW as NewRow
FOR EACH ROW
WHEN NewRow.Year < (select max(year) from xyz.table as t1 where t1.name = NewRow.name group by t1.name)
abort;
Я новичок в триггерах в целом, и документация по teradata кажется пористой. Любые предложения приветствуются.