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字段,注意是冒號+等號,單個等號是等職計算
總結
以上是生活随笔為你收集整理的oracle 触发器(根据条件修改插入后的某个字段值)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工具调试html实训报告,网站服务器配置
- 下一篇: 【C++】哈希(闭散列,开散列)