С IIS6 можно сделать одну из двух вещей:
Since не доступна на большинстве веб-хостов, необходимо пойти для номера 2.
Смоделированные мной таблицы всегда включают:
CREATED_USER
, VARCHAR2 CREATED_DATE
, DATE UPDATED_USER
, VARCHAR2 UPDATED_DATE
, DATE ... столбцы. Зачем реализовывать триггер, если вы можете установить значение одновременно с INSERT / UPDATE?
INSERT INTO TABLE (...CREATED_DATE, UPDATED_DATE) VALUES (...,SYSDATE, SYSDATE);
UPDATE TABLE
SET ...,
UPDATED_DATE = SYSDATE
Я уверен, что вам нужно сделать это с помощью триггера в Oracle:
create or replace TRIGGER parkedorder_tbiur
BEFORE INSERT OR UPDATE
ON parkedorder
REFERENCING OLD AS old_row NEW AS new_row
FOR EACH ROW
BEGIN
IF INSERTING
THEN
IF :new_row.ID IS NULL
THEN
SELECT parkedorder_seq.NEXTVAL
INTO :new_row.ID
FROM DUAL;
END IF;
END IF;
IF :new_row.lastupdated <> SYSDATE
OR :new_row.lastupdated IS NULL
THEN
SELECT sysdate
INTO :new_row.lastupdated
FROM DUAL;
END IF;
SELECT SYS_CONTEXT ( 'USERENV', 'OS_USER' )
INTO :new_row.lastupdatedby
FROM DUAL;
END;
Да, через trigger:
create or replace
TRIGGER schema.name_of_trigger
BEFORE INSERT OR UPDATE ON schema.name_of_table
FOR EACH ROW
BEGIN
:new.modified_on := SYSTIMESTAMP;
END;
Предполагается, что в вашей таблице есть поле с именем modified_on.
Как было отмечено выше, триггер является идеальным кандидатом в любое время, когда у вас есть несколько разных мест, где таблица обновляется. Если у вас есть только одна функция / процедура, которая может обновлять таблицу, просто сделайте это там и пропустите триггер.
Вы можете очень близко к этому подойти, запросив ORA_ROWSCN
: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns007.htm#sthref825
Это более точно, если вы создали таблицу с опцией ROWDEPENDENCIES.
Он фактически регистрирует время фиксации для записи ...
drop table tester
/
create table tester (col1 number, col2 timestamp)
rowdependencies
/
insert into tester values (1, systimestamp)
/
(approximate five second pause)
commit
/
select t.ora_rowscn,
SCN_TO_TIMESTAMP(t.ora_rowscn),
t.col1,
t.col2
from tester t
/
ORA_ROWSCN SCN_TO_TIMESTAMP(T.ORA_ROWSCN) COL1 COL2
---------------------- ------------------------------ ---------------------- -------------------------
9104916600628 2009-10-26 09.26.38.000000000 1 2009-10-26 09.26.35.109848000
Другой способ справиться с этим - включить детальный аудит. У отдельных строк не будет метки времени, но вы будете записывать все изменения. Впрочем, в большинстве ситуаций я переборщил - обычно я просто использую триггеры.
Если вы согласны с ближайшими 0,01 секунды, вы можете использовать формат даты и назначить sysdate. Если вам нужна дополнительная информация, используйте метку времени.
Для oracle я обычно использую триггер для обновления поля отметки времени
CREATE OR REPLACE TRIGGER update_timestamp
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
BEGIN
:NEW.TS := systimestamp;
END;
Oracle, похоже, не имеет встроенного атрибута для обновления поля отметки времени на текущую отметку времени (в отличие от других БД, таких как MySQL).