oracle 資料庫觸發器,插入更新時間戳

2022-02-25 23:14:53 字數 3148 閱讀 3672

1、首先建立乙個測試表

create table testtragger(

userid

intprimary key,

name varchar(

10) not null,

createtime timestamp not null

);

建立索引:(用於userid主鍵自增)

一、old和new在oracle中不區分大小寫;

二、old和new可以用在declare中也可以用在begin裡的sql語句;(只會在begin中的sql語句裡用)

三、old表示插入之前的值,new表示新插入的值。

四、new 只出現在insert和update時,old只出現在update和delete時。在insert時new表示新插入的行資料,update時new表示要替換的新資料、old表示要被更改的原來的資料行,delete時old表示要被刪除的資料。

四、for each row      --行級觸發器,一般表記的會報錯,沒有深入研究

create or replace trigger myusap                          //建立或替換 名稱為myusap的觸發器

before insert or update on testtragger //新增和修改執行前出發,物件目標:testtragger表

for each row //行級觸發器,每影響一行觸發一次

begin

if inserting then //插入資料操作

:new.createtime :=sysdate;

elsif updating then //修改資料操作

:new.createtime :=sysdate;

end if;

end;

建立序列:

create sequence testtragger_squence 

increment by

1 --每次加幾個

start with

1 --從1開始計數

nomaxvalue --不設定最大值

nocycle --一直累加,不迴圈

cache

10;

測試插入和修改資料:

insert into testtragger(userid,name) values(testtragger_squence.nextval,'

李四'); //

插入資料

select userid,name, createtime, to_char(createtime,'

yyyy-mm-dd hh:mm:ss

') from testtragger; //

查詢資料

update testtragger set name='李四'

where userid = 2; //

修改資料

效果圖:先查詢現有的資料

然後執行修改操作:update testtragger set name='王五' where userid = 2;

修改完名稱,時間戳也更新到了最新修改的時間。

注意,sysdate是精確到秒的時間戳,這個一般在粗略記錄修改人的時候使用,

但是當我們是用來進行版本控制,我們需要很高的精確度,此時應該用毫秒級的時間戳:systimestamp

把觸發器中的:sysdate改為systimestamp

效果展示:

其實這裡主鍵id也是可以在觸發器中進行的,**如下:

insert into testtragger(name) values('

阿斯瑪3');

select userid,name, createtime, to_char(createtime,'

yyyy-mm-dd hh24:mi:ssxff

') from

testtragger order by createtime ;

create sequence seq_testtragger_id start with

1;--建立乙個序列從1開始

create or replace trigger myusap

before insert or update on testtragger for each row

begin

if inserting then --插入資料操作

select seq_testtragger_id.nextval into :new.userid from dual; --:new新值 :old老值

:new.userid := seq_testtragger_id.currval; --新增時為userid賦值,利用序列自增,(oracle不支援 auto_increment,)

:new.createtime :=systimestamp;

elsif updating then --修改資料操作

:new.createtime :=systimestamp;

end if;

end;

drop trigger myusap; --刪除觸發器

drop sequence seq_testtragger_id; --刪除序列

delete from testtragger; --清空表

執行順序和例項效果:

oracle資料庫觸發器

instead of觸發器介紹 instead of觸發器代替觸發動作,並在處理約束之前激發 對於每個觸發操作,每個表或檢視都只能有乙個instead of觸發器。而乙個表對於每個觸發操作可以有多個after觸發器 instead of觸發器的建立模板 create or replace trigg...

Oracle資料庫update觸發器

在專案中使用到oracle資料庫的update觸發器,先記錄下來方便以後查閱。預備知識和格式以後再編輯吧,先把內容貼出來。create or replace trigger demo trigger after update on tb goods referencing new as new ol...

Oracle資料庫觸發器例項

需求 在修改表qdyth.jzfpjcxx時,要實時記錄表中的資料變動情況 協商後結果 建立新錶記錄資料變動情況 實現手段 資料庫觸發器 建立或修改觸發器 tr jzfpjcxx 2 create or replace trigger tr jzfpjcxx 2 觸發條件 before delete...