oracle 触发器 实例

长沙天气阴晴不定,早上大太阳,没想到不到中午就已经开始下雨。花粥花大爷的新歌还真不错,推荐《老郭》,真的适合这种天气听~

行了,不瞎扯了。

今天玩了一下触发器,记录一下用法,网上关于触发器的介绍一大堆,这里就不多赘述了。

触发器的语法:

create [or replace] tigger 触发器名 触发时间 触发事件
on 表名 [for each row]
begin
       语句
end

其中:

触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发器执行;
after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

需求:给一个表加一个触发器,当这个表,新插入数据,就将这些数据插入到另外一张表中进行同步

直接贴代码了:

create or replace trigger TG_I_PT_HC_H01 after insert on PT_HC_H01 for each row
begin
       if(:new.ID_NO||''is not null and :new.NAMES||''is not null)
       then
       insert 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 代表 新加进来的那一行数据

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 :定义序列的初始值(即产生的第一个值),默认为1。

3) maxvalue: 定义序列生成器能产生的最大值。

4) minvalue:定义序列生成器能产生的最小值。

5)  CYCLE和NOCYCLE: 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

6)  cache(缓冲):定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

7)  NEXTVAL :返回序列中下一个有效的值,任何用户都可以引用。

8)  CURRVAL :中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。

注意:序列的值会一直往下增加,要想改变序列的初始值,只能删除,重建

发布了100 篇原创文章 · 获赞 96 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq_25221835/article/details/89318329
今日推荐