1、首先建立乙個測試表
create table testtragger(建立索引:(用於userid主鍵自增)userid
intprimary key,
name varchar(
10) not null,
createtime timestamp not null
);
一、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...