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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> If-then-else в триггерах, но своеобразний 
V
    Опции темы
zhefran
Дата 10.3.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

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



Перевожу таблици с MySQL в Oracle. 
Столкнулся с проблемой. Исходная таблица
Код

create table p (
 id int,
 a varchar(10),
 d timestamp DEFAULT CURRENT_TIMESTAMP
                  ON UPDATE CURRENT_TIMESTAMP,
 constraint p_pk primary key (id)
);
 
В Oracle для ON UPDATE CURRENT_TIMESTAMP, нужно сделать триггер. Нашел такой код:
Код

create table p (id number, a varchar2(10), d date default sysdate, 
       constraint p_pk primary key (id));

insert into p(id,a) values (1,'test');

CREATE OR REPLACE TRIGGER p_d_trig
BEFORE UPDATE ON p
FOR EACH ROW
BEGIN
        select sysdate into :new.d from dual;
END p_d_trig;

update p set a='foo' where id=1;


Но при этом триггере я немогу делать update для даты, так как запишется текушая, а не изменямое значение.

Подскажите, пожалуйста, как мне изменить триггер, для реализации такой возможности.

Это сообщение отредактировал(а) zhefran - 10.3.2010, 11:36
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
ToshaCh
Дата 10.3.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Код

if :new.d is nul then .....

Может так? Если в стейтменте не указана дата, то будет sysdate, если указана, то собственно её и берём.


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
zhefran
Дата 10.3.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

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



Спасибо за помощь!
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
DimW
Дата 10.3.2010, 13:40 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(ToshaCh @  10.3.2010,  11:46 Найти цитируемый пост)
Может так?

может лучше по человечески smile :
Код

IF NOT UPDATING ('D') THEN :NEW.D = SYSDATE ...


Добавлено через 4 минуты и 59 секунд
Цитата(ToshaCh @  10.3.2010,  11:46 Найти цитируемый пост)
Если в стейтменте не указана дата, то будет sysdate, если указана, то собственно её и берём

к тому же дату и на null можно поменять - в DDL таблице она nullabel
PM MAIL ICQ   Вверх
Zloxa
Дата 10.3.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Нихрена не понятно.
Тип Timestamp в M$ это вовсе не дата, а двоичные данные, которые характеризуют кагбе "версию" строки, и используется, обычно, для реализации стратегии оптимистического блокирования. Для тех же нужд, в оракле задуман псевдостолбец ora_rowscn.

И вот в этом контексте конструкция "DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" применимая к этому столбцу выгдядит полной херней. Т.к. CURRENT_TIMESTAMP  возвращает дату, которая якобы должна запиаться в счетчик, который ведет сам M$ smile 

Это сообщение отредактировал(а) Zloxa - 10.3.2010, 14:10


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Fortop
Дата 10.3.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



Цитата(Zloxa @  10.3.2010,  13:00 Найти цитируемый пост)
Тип Timestamp в M$ 

Обращаю внимание
Цитата(zhefran @  10.3.2010,  10:34 Найти цитируемый пост)
MySQL




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zloxa
Дата 10.3.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(Fortop @  10.3.2010,  14:09 Найти цитируемый пост)
MySQL

сорри.
Не правильно прочел.
Спасибо.

Это сообщение отредактировал(а) Zloxa - 10.3.2010, 14:11


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ToshaCh
Дата 10.3.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Цитата(DimW @  10.3.2010,  13:40 Найти цитируемый пост)
может лучше по человечески

Да, так пожалуй лучше.


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0662 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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