![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Никто не подскажет, в чем здесь логическая ошибка? [D6]
}|{yk © (2004-02-19 16:57:00)Триггер записывает не необходимое значение, а затирает текущее
CREATE OR REPLACE TRIGGER APP_BANK_A_INSERT
BEFORE
INSERT
ON APP_BANK
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
begin
update app_plateg set app_plateg.summa_free=app_plateg.summa_free-:new.summa where app_plateg.plat_id=:new.plat_id;
end;
/
Он должен при добавлении записи в таблицу app_bank уменьшать на соответствующее значение поле summ_free в таблице app_plateg/ Но вместо этого он затирает значение в этом поле. В чем глюк?
Guest (2004-02-19 17:35:00) [21][4] }|{yk © (19.02.04 17:32)
Перевожу намек RME. Из двух операндов хотя бы один почему-то NULL.
}|{yk (2004-02-19 17:32:00) [22]Если бы select a.summa_free into summ from app_plateg a where a.plat_id=:new.plat_id;
не давало результатов, я бы получил ошибку no_data_found ее нет, но и результата тоже
}|{yk (2004-02-19 17:30:00) [23]Да нет
Если в триггер добавить
select a.summa_free into summ from app_plateg a where a.plat_id=:new.plat_id;
то summ будет имет пустое значение
да и какой смысл проверять - app_plateg и app_bank имеют связь 1-m
так что summ_free обязательно будет иметь значение, как и :new.summa
Reindeer Moss Eater (2004-02-19 17:18:00) [24]Подсказка
declare
i integer;
n integer;
r number;
begin
i:=1;
n:=null;
r := i - n;
if r is null then
dbms_output.put_line('null');
else
dbms_output.put_line(to_char(r));
end if;
end;
Guest (2004-02-19 17:01:00) [25]Попробовать удалить "old as old"?