dka*_*man 19
很确定你必须在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;
Run Code Online (Sandbox Code Playgroud)
Dav*_*ill 15
是的,通过触发器:
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;
Run Code Online (Sandbox Code Playgroud)
假设您的表有一个名为modified_on的字段.
如上所述,只要您有多个表更新的不同位置,触发器就是理想的候选者.如果您只有一个可以更新表的函数/过程,只需在那里执行,然后跳过触发器.
小智 7
对于oracle,我通常使用触发器来更新时间戳字段
CREATE OR REPLACE TRIGGER update_timestamp
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
BEGIN
:NEW.TS := systimestamp;
END;
Run Code Online (Sandbox Code Playgroud)
Oracle似乎没有用于将时间戳字段更新为当前时间戳的内置属性(与MySQL之类的其他数据库不同).
您可以通过查询来了解这一点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
Run Code Online (Sandbox Code Playgroud)
我建模的表始终包括:
CREATED_USER, VARCHAR2CREATED_DATE,日期UPDATED_USER, VARCHAR2UPDATED_DATE,日期...列。当您可以在 INSERT/UPDATE 的同时设置值时,为什么要实现触发器呢?
INSERT INTO TABLE (...CREATED_DATE, UPDATED_DATE) VALUES (...,SYSDATE, SYSDATE);
UPDATE TABLE
SET ...,
UPDATED_DATE = SYSDATE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34978 次 |
| 最近记录: |