oracle 触发器 实例
長沙天氣陰晴不定,早上大太陽,沒想到不到中午就已經(jīng)開始下雨。花粥花大爺?shù)男赂柽€真不錯,推薦《老郭》,真的適合這種天氣聽~
行了,不瞎扯了。
今天玩了一下觸發(fā)器,記錄一下用法,網(wǎng)上關(guān)于觸發(fā)器的介紹一大堆,這里就不多贅述了。
觸發(fā)器的語法:
create?[or?replace] tigger 觸發(fā)器名 觸發(fā)時間 觸發(fā)事件 on?表名 [for?each row] begin語句 end其中:
觸發(fā)器名:觸發(fā)器對象的名稱。由于觸發(fā)器是數(shù)據(jù)庫自動執(zhí)行的,因此該名稱只是一個名稱,沒有實質(zhì)的用途。
觸發(fā)時間:指明觸發(fā)器何時執(zhí)行,該值可取:
before:表示在數(shù)據(jù)庫動作之前觸發(fā)器執(zhí)行;
after:表示在數(shù)據(jù)庫動作之后觸發(fā)器執(zhí)行。
觸發(fā)事件:指明哪些數(shù)據(jù)庫動作會觸發(fā)此觸發(fā)器:
insert:數(shù)據(jù)庫插入會觸發(fā)此觸發(fā)器;
update:數(shù)據(jù)庫修改會觸發(fā)此觸發(fā)器;
delete:數(shù)據(jù)庫刪除會觸發(fā)此觸發(fā)器。
表 名:數(shù)據(jù)庫觸發(fā)器所在的表。
for each row:對表的每一行觸發(fā)器執(zhí)行一次。如果沒有這一選項,則只對整個表執(zhí)行一次。
需求:給一個表加一個觸發(fā)器,當這個表,新插入數(shù)據(jù),就將這些數(shù)據(jù)插入到另外一張表中進行同步
直接貼代碼了:
create or replace trigger TG_I_PT_HC_H01 after insert on PT_HC_H01 for each row beginif(:new.ID_NO||''is not null and :new.NAMES||''is not null)theninsert into PT_TPB_BASEINFO(ID$,PID$,SOURCEID$,MPIID$,OPERATIONFLAG$,UPLOADFLAG$,POSTDATEID$,CREATETIME$,UPDATETIME$,STATUS$,ORG_CODE,ORG_NAME,BASEINFO_NAME,IDENTITY_TYPE_CODE,IDENTITY_CARDS,GENDER_CODE,BIRTHDAY,EDUCATIONLEVEL_CODE,EDUCATIONLEVEL_NAME,MARITAL_STATUS_CODE,MARITAL_STATUS_NAME,SEAT_PHONE,TEL_NUM,NATIONALITY_CODE,NATIONALITY_NAME,RESIDENTPLACE_AREA_NAME,DOMICILE_AREA_NAME)VALUES (SEQ_PT_TPB_BASEINFO.NEXTVAL,:new.ID$,:new.SOURCEID$,:new.MPIID$,:new.OPERATIONFLAG$,:new.UPLOADFLAG$,:new.POSTDATEID$,:new.CREATETIME$,:new.UPDATETIME$,:new.STATUS$,:new.ORG_CODE,:new.ORG_NAME,:new.NAMES,:new.ORTHER_ID_NO_CD,:new.ID_NO,:new.GENDER_CD,:new.BIRTH_DATE,:new.ED_BG_CD,:new.ED_BG_NAME,:new.MARITAL_ST_CD,:new.MARITAL_ST_NAME,:new.LINKMAN_TEL,:new.TEL,:new.NATION_CD,:new.NATION,:new.REG_ADDR,:new.ADDR);end if; end;?
?if(:new.ID_NO||''is not null and :new.NAMES||''is not null):判斷了一下身份證號碼和名稱是否是空
:new.UPDATETIME$::new 代表 新加進來的那一行數(shù)據(jù)
SEQ_PT_TPB_BASEINFO.NEXTVAL: 取SEQ_PT_TPB_BASEINFO的值作為id$的值
?
SEQ_PT_TPB_BASEINFO代碼:
-- Create sequence create sequence SEQ_PT_TPB_BASEINFO minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 cache 20;序列的介紹:
1)?increment by?:用于定義序列的步長。
2) start with?:定義序列的初始值(即產(chǎn)生的第一個值),默認為1。
3)?maxvalue:?定義序列生成器能產(chǎn)生的最大值。
4)?minvalue:定義序列生成器能產(chǎn)生的最小值。
5)? CYCLE和NOCYCLE: 表示當序列生成器的值達到限制值后是否循環(huán)。CYCLE代表循環(huán),NOCYCLE代表不循環(huán)。如果循環(huán),則當遞增序列達到最大值時,循環(huán)到最小值;對于遞減序列達到最小值時,循環(huán)到最大值。如果不循環(huán),達到限制值后,繼續(xù)產(chǎn)生新值就會發(fā)生錯誤。
6)? cache(緩沖):定義存放序列的內(nèi)存塊的大小,默認為20。NOCACHE表示不對序列進行內(nèi)存緩沖。對序列進行內(nèi)存緩沖,可以改善序列的性能。
7)? NEXTVAL :返回序列中下一個有效的值,任何用戶都可以引用。
8)? CURRVAL :中存放序列的當前值,NEXTVAL?應(yīng)在?CURRVAL?之前指定 ,二者應(yīng)同時有效。
?
注意:序列的值會一直往下增加,要想改變序列的初始值,只能刪除,重建
?
?
總結(jié)
以上是生活随笔為你收集整理的oracle 触发器 实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Weblogic部署
- 下一篇: RubyOnRails 文件下载