середа, 10 березня 2010 р.

Перетворення виразу "on update current_timestamp" з MySQL в Oracle

Інколи буває потреба взнати дату та час зміни рядків в таблиці.

MySQL має вбудовану властивість для автоматичного оновлення дати при кожній зміні рядка вже існуючої таблиці, яка має вигляд "on update current_timestamp".

Створення таблиці в MySQL буде виглядати приблизно так:

create table p 
(
id int,
a varchar(10),
d timestamp DEFAULT CURRENT_TIMESTAMP
 ON UPDATE CURRENT_TIMESTAMP,
constraint p_pk primary key (id)
);
Для того щоб зробити теж саме в Oracle потрібно створити триггер, який буде виконувати функцію оновлення дати і часу.
Наприклад:
-- створення таблиці 
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
-- вводим умову, щоб можна було оновлювати дату через update
-- якщо її не буде,то виконання, наприклад, 
-- update p set d=to_date('2010-02-03 23:12:10','yyyy-mm-dd hh24:mi:ss') where id=1
-- призведе не до потрібної нам дати, а до фактичної дати зміни  
  IF NOT UPDATING ('D') then
   select sysdate into :new.d from dual; 
  END IF;
END p_d_trig;

Велика подяка за допомогу ToshaCh.

Немає коментарів:

Дописати коментар