oracle 触发器(根据条件修改插入后的某个字段值)

背景:

有一类轨迹数据来源于第三方接口,但接口推送的数据差一个轨迹描述字段(即对该条活动轨迹数据的各个字段拼接一下作为描述),叫双方研发重新改接口太浪费时间,所以想到利用触发器来解决,之前没写过触发器,于是现学现用,顺便做个笔记

触发器语法
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;

语法解释:
trigger_name:触发器名称
before | after : 指定触发器是在触发事件发生之前触发还暗示发生之后触发
trigger_event:触发事件,在DML触发器中主要为insert、update、delete等
table_name:表名,表示发生触发器作用的对象
for each row:指定创建的是行级触发器,若没有该子句则创建的是语句级触发器
when trigger_condition:添加的触发条件
trigger_body:触发体,是标准的PL/SQL语句块

 

 

create or replace trigger RYGL_YSCLKK_INSERT_HDXXMS --创建或更新触发器RYGL_YSCLKK_INSERT_HDXXMS
 before insert  --插入前触发
 on t_ry_gjxx  --作用在t_ry_gjxx表
 for each row  --行级触发
declare
 xming varchar2(50);  --创建一个变量,因为对面没传了身份证没传名字,所以后续得去查名字赋值给这个变量
begin   --开始
if  :new.dtxxlx='YSCLKK' and :new.gjtszt='2' and :new.sfzh !='000000000000000000' and :new.hdfssj>'20191230000001' then --判断是否为借口推送数据且身份证是否是正常身份证号码
 select xm into xming from t_ry_jbxx where sfzh=:new.sfzh;  利用接口传过来的身份证去本地数据库查询姓名并赋值给xming变量
 :new.hdxxms:='您布控的车牌:'||substr(:new.bzhm,8,7)||'(姓名:'||xming||',身份证:'||:new.sfzh||')于'||to_char(to_date(:new.hdfssj,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')||'通过'||:new.fsdshcs;       --拼接活动描述字符串并赋值给hdxxms字段
 :new.gjtszt:='0';    --将0赋值给gjtszt字段
 :new.rksj:=sysdate;   --将当前时间赋值给rksj字段
 end if;  --结束
end;  --结束

 

 

小记:

select 字段名 into 变量 from 表/视图  where 条件   表示将某个查询结果赋值给变量

:new表示操作完成后的值

:=表示赋值

例如:

:new.rksj:=sysdate; 表示将当前时间赋值给rksj字段,注意是冒号+等号,单个等号是等职计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜灬狼丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值