Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с триггером! Триггеры в БД ORACLE 
:(
    Опции темы
Гость_Albinos
Дата 16.8.2004, 17:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как выглядит код триггера на следующую задачу:

Перед выполнением команды "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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



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



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Гость_Albinos
Дата 16.8.2004, 22:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Эх, если бы все так просто было...

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

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

Подозреваю, что оракл начинает ругаться еще когда в NEW.TESTDATE пишется строка вида 'DD.MM.YYYY' (которую он не понимает). Т.Е. до отработки триггера...
  Вверх
LSD
Дата 17.8.2004, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Чего то я не совсем понял проблему. В тригере 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 ...


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.