關於觸發器

2021-06-16 05:07:15 字數 3043 閱讀 5295

dml觸發器

語句觸發器:當執行dml語句時被隱含執行的觸發器

語法: create (or replace) trigger t_update_a

event1  [or event2 or event3]

on table_name

pl/sql block;

行觸發器-----當執行dml語句時,每作用一行被觸發一次的觸發器,當使用dml語句觸發器時,

不能記錄列資料的變化,為了審計表資料的變化,就需要使用行觸發器

限制行觸發器:-----在特定條件下執行行觸發器,需要使用when子句對觸發條件加以限制,

(下面以審計崗位salesman的雇員工資變化為例)

eg:  create or replace trigger  tr_sal_change

after update or sal  on emp

for each row

when (old.job='salesman')

declare

v_temp int;

begin

select count(*) into v_temp from audit_emp_change where name=:old.ename;

if v_temp=0 then

insert into audit_emp_change

values(:old.ename,:old.sal,:new.sal,sysdate);

else

update audit_emp_change

set oldsal_:old.sal,newsal=:new.sal, time=sysdate

where name=:old.ename;

end if;

end;

eg:create trigger after_iqc_inspection 

after insert on iqcm.iqc_inspection

for each row

declare

v_specid iqc_spec.id%type;

v_subclassno iqc_spec.subclassno%type;

--??????

v_plant iqc_inspec_set.plant%type;

v_grade iqc_inspec_set.geadeno%type;

v_methodno iqc_inspec_set.methodno%type;

v_countaql iqc_inspec_set.countaql%type;

v_methodno_jl  iqc_inspec_set.measure_methodno%type;

begin

--?????????

declare cursor acc_cursor is

select y.plant,y.geadeno,y.methodno,y.measure_methodno,y.countaql  

from iqc_inspec_set y

where y.plant=trim(:new.plant) and y.p_no=trim(:new.p_no);          

begin

open acc_cursor;

fetch acc_cursor into v_plant,v_grade,v_methodno,v_methodno_jl,v_countaql;

close acc_cursor;

end;

--??????????

declare cursor mycursor1 is

select a.id,a.subclassno from iqc_spec a where exists

(select b.specid from iqc_inspec_execute_spec b

where b.specid=a.id and b.executeid=trim(:new.executeid));

begin

open mycursor1;

fetch mycursor1 into v_specid,v_subclassno;

while mycursor1%found  

loop

--???????? aql,???? 

if (v_subclassno<3) then

insert into iqc_lot_info (stutasid,subclassno,spec_id,grade_no,method_no,acc_aql,plant)

values(:new.id,v_subclassno,v_specid,v_grade,v_methodno,v_countaql,v_plant);

else

insert into iqc_lot_info (stutasid,subclassno,spec_id,method_no,plant)

values(:new.id,v_subclassno,v_specid,v_methodno_jl,v_plant);

end if;

fetch mycursor1 into v_specid,v_subclassno;

end loop;

close mycursor1;

end;

--?????????

insert into iqc_lot_info (stutasid,subclassno,spec_id,plant)

values(:new.id,0,'f590039595f758e1e030850a6382459b',v_plant);

--?????????????????

insert into iqc_check (stutasid,subclassno,spec_id)

values(:new.id,0,'f590039595f758e1e030850a6382459b');

--dbms_output.put_line(v_plant||v_grade||v_mothod||v_countaql);

end;

關於觸發器

觸發器的定義 觸發器是乙個特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。觸發器的作用 觸發器是乙個特殊的儲...

關於觸發器

inserted存放進行insert和update操作後的資料,deleted存放進行delete和update操作前的資料,他們是觸發器執行時用到的兩張特殊表,也可以說是種臨時表,是在進行啟用觸發器時由系統自動生成 如你給了資料庫裡兩張表,一張學生表 student 一張成績表 score 當你想...

關於Mysql 觸發器

首先,測試版本 mysql 5.6。然後再看觸發器的語法 create definer triggertrigger name trigger timetrigger event ontbl namefor each row trigger body trigger time trigger eve...