Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Помогите с триггером!


Автор: Гость_Albinos 16.8.2004, 17:05
Как выглядит код триггера на следующую задачу:

Перед выполнением команды "UPDATE TEST SET TESTDATE='23.07.2004' WHERE ..." надо заменить '23.07.2004' на TO_TIMESTAMP('23.07.2004', 'DD.MM.YYYY')

Необходим лишь код, сервер 9i.


Автор: LSD 16.8.2004, 19:24
Ставишь триггер BEFORE UPDATE, а в нем:
Код
TESTDATE.NEW := TO_TIMESTAMP('23.07.2004', 'DD.MM.YYYY')

Автор: Гость_Albinos 16.8.2004, 22:56
Эх, если бы все так просто было...

Понимаешь, когда я пишу запрос - я не знаю какая дата будет там вставлена. Поэтому такой вариант работает, но не прокатит.

А вот как в NEW.TESTDATE засобачить TO_TIMESTAMP(NEW.TESTDATE, 'DD.MM.YYYY') - непонятно (приведенный код не работает).

Подозреваю, что оракл начинает ругаться еще когда в NEW.TESTDATE пишется строка вида 'DD.MM.YYYY' (которую он не понимает). Т.Е. до отработки триггера...

Автор: LSD 17.8.2004, 11:12
Чего то я не совсем понял проблему. В тригере BEFORE UPDATE можно изменить любое новое значение, это точно. У меня используются такие триггеры:
Код
create or replace trigger <TRIGGER_NAME> before insert on
                          <TABLE_NAME> for each row
declare
begin
:new.GUID := SYS_GUID();
end <TRIGGER_NAME>;"


Кстати UPDATE написан не правильно т.к. умолчальный формат даты в Oracle: yyyy-MM-dd HH:mm:ss.SSS, при желании можно не писать милисекунды или время полностью. Надо писать так: UPDATE TEST SET TESTDATE='2004-07-23' WHERE ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)