WHENUPDATING('salary')THEN
IF:NEW.salary<:old.salaryTHEN
RAISE_APPLICATION_ERROR(-20001,'部门 80 的人员的工资不能降');
ENDIF;
WHENUPDATING('commission_pct')THEN
IF:NEW.commission_pct<:old.commission_pctTHEN
RAISE_APPLICATION_ERROR(-20002,'部门 80 的人员的奖金不能降');
ENDIF;
WHENDELETINGTHEN
RAISE_APPLICATION_ERROR(-20003,'不能删除部门 80 的人员记录');
ENDCASE;
END;
/*
实例:
UPDATEemployeesSETsalary=8000WHEREemployee_id=177;
DELETEFROMemployeesWHEREemployee_idin(177,170);
*/
例 4:利用行触发器实现级联更新。在修改了主表 regions 中的 region_id 之后
(AFTER),级联的、自动的更新子表 countries 表中原来在该地区的国家的 region_id。
CREATEORREPLACETRIGGERtr_reg_cou
AFTERupdateOFregion_id
ONregions
FOREACHROW
BEGIN
DBMS_OUTPUT.PUT_LINE('旧的 region_id 值是'||:old.region_id
||'、新的 region_id 值是'||:new.region_id);
UPDATEcountriesSETregion_id=:new.region_id
WHEREregion_id=:old.region_id;
END;
例 5:在触发器中调用过程。
CREATEORREPLACEPROCEDUREadd_job_history
(p_emp_idjob_history.employee_id%type
,p_start_datejob_history.start_date%type
,p_end_datejob_history.end_date%type
,p_job_idjob_history.job_id%type
,p_department_idjob_history.department_id%type
)