sandysman
Дата: 02.12.2012 16:00:13
Не понимаю как правильно написать тригер. К примеру есть поле date типа дата. Хочу написать проверку на то, что если это поле пустое то поставить текущую дату.
Create trigger Proverka before Insert or update on Zakaz
declare
begin
if : old.Date=null then
: new.Date=current_date;
end Proverka;
примерно такой код, но тригер не работает, еще в тригере есть поле referencing в котором можно как я понял назначать old и new, но как правильно писать тригер с этим полем я так и не разобрался. Просвещенных просьба вразумить)
softwarer
Дата: 02.12.2012 19:23:20
| sandysman |
|---|
| Create trigger Proverka before Insert or update on Zakaz |
Вы забыли важные слова for each row
| sandysman |
|---|
if : old.Date=null then : new.Date=current_date; |
:new.date := coalesce(:old.date, sysdate);
| sandysman |
|---|
| примерно такой код, но тригер не работает, |
Ну, в таком виде он даже не откомпилируется. Если исправить хотя бы основные ошибки (это построчность, присваивание, использование зарезервированного слова как имени поля) - то откомпилируется, но будет работать именно так, как Вы написали (то есть никак).
sandysman
Дата: 03.12.2012 12:21:47
Не ну это ясно и понятно, что проще, если б не препод то я в такой маразм и не впадал) а так, что придумал то и напишу. pit_alex,
sandysman
Дата: 03.12.2012 14:17:26
Сколько я пересмотрел примеров, но почему-то ни один мой тригер сделанный по этим примерам не работает. Может перед for each row нужно поставить referencing, а то у меня такое ощущение, что ни в old ни в new нет никаких переменных.
Данный тригер должен проверять старые значения в таблице с новыми, которые вставили и если код методичек совпал, то удалить данную строку, но конечно инчего из этого не работает, все делаю как показано в учебниках, примерах, такое ощущение, что они не oracle используют.
Create trigger ProverkaMetod After Insert or update on KontrMetod
For each row
begin
If : New.KodMetod=: old.KodMetod THEN
Delete kontrmetod Where kodmetod=: new.KodMetod;
end ProverkaMetod;
Переделанный код тринера, тоже ноль по работе, вроде задачи то стоят перед ними простые.
Create trigger Proverka before Insert or update on Zakaz
For each row
begin
If New.Datazakaz is NULL THEN
: new.datazakaz= current_date;
end Proverka;