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...