长沙天气阴晴不定,早上大太阳,没想到不到中午就已经开始下雨。花粥花大爷的新歌还真不错,推荐《老郭》,真的适合这种天气听~
行了,不瞎扯了。
今天玩了一下触发器,记录一下用法,网上关于触发器的介绍一大堆,这里就不多赘述了。
触发器的语法:
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 之前指定 ,二者应同时有效。
注意:序列的值会一直往下增加,要想改变序列的初始值,只能删除,重建