现在网站如何做优化装修体验馆app
news/
2025/10/4 21:55:24/
文章来源:
现在网站如何做优化,装修体验馆app,怎么做网页二维码,千鸟云网站建设行级触发器#xff1a;当触发器被触发时#xff0c;要使用被插入、更新或删除的记录中的列值#xff0c;有时要使用操作前、后列的值.:NEW 修饰符访问操作完成后列的值:OLD 修饰符访问操作完成前列的值例1: 建立一个触发器, 当职工表 emp 表被删除一条记录时#xff0c;把被…行级触发器当触发器被触发时要使用被插入、更新或删除的记录中的列值有时要使用操作前、后列的值.:NEW 修饰符访问操作完成后列的值:OLD 修饰符访问操作完成前列的值例1: 建立一个触发器, 当职工表 emp 表被删除一条记录时把被删除记录写到职工表删除日志表中去。CREATE TABLE emp_his AS SELECT * FROM EMP WHERE 1 2 ; CREATE OR REPLACE TRIGGER tr_del_emp BEFORE DELETE -- 指定触发时机为删除操作前触发 ON scott.emp FOR EACH ROW -- 说明创建的是行级触发器 BEGIN -- 将修改前数据插入到日志记录表 del_emp ,以供监督使用。 INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate ) VALUES ( :old.deptno, :old.empno, :old.ename , :old.job,:old.mgr, :old.sal, :old.comm, :old.hiredate ); END ; DELETE emp WHERE empno 7788 ; DROP TABLE emp_his; DROP TRIGGER del_emp;例2限制对Departments表修改(包括INSERT,DELETE,UPDATE)的时间范围即不允许在非工作时间修改departments表。CREATE OR REPLACE TRIGGER tr_dept_time BEFORE INSERT OR DELETE OR UPDATE ON departments BEGIN IF (TO_CHAR(sysdate, DAY ) IN ( 星期六 , 星期日 )) OR (TO_CHAR(sysdate, HH24:MI ) NOT BETWEEN 08:30 AND 18:00 ) THEN RAISE_APPLICATION_ERROR( - 20001 , 不是上班时间不能修改departments表 ); END IF ; END ;例3限定只对部门号为80的记录进行行触发器操作。CREATE OR REPLACE TRIGGER tr_emp_sal_commBEFORE UPDATE OF salary, commission_pctOR DELETEON HR.employees FOR EACH ROW WHEN (old.department_id 80 ) BEGIN CASE WHEN UPDATING ( salary ) THEN IF :NEW.salary :old.salary THEN RAISE_APPLICATION_ERROR( - 20001 , 部门80的人员的工资不能降 ); END IF ; WHEN UPDATING ( commission_pct ) THEN IF :NEW.commission_pct :old.commission_pct THEN RAISE_APPLICATION_ERROR( - 20002 , 部门80的人员的奖金不能降 ); END IF ; WHEN DELETING THEN RAISE_APPLICATION_ERROR( - 20003 , 不能删除部门80的人员记录 ); END CASE ; END ;/*实例UPDATE employees SET salary 8000 WHERE employee_id 177;DELETE FROM employees WHERE employee_id in (177,170);*/例4 利用行触发器实现级联更新。在修改了主表 regions 中的 region_id 之后( AFTER )级联的、自动的更新子表 countries 表中原来在该地区的国家的 region_id 。CREATE OR REPLACE TRIGGER tr_reg_cou AFTER update OF region_id ON regions FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE( 旧的region_id值是 || :old.region_id || 、新的region_id值是 || :new.region_id); UPDATE countries SET region_id :new.region_id WHERE region_id :old.region_id; END ;例5在触发器中调用过程。CREATE OR REPLACE PROCEDURE add_job_history ( p_emp_id job_history.employee_id % type , p_start_date job_history.start_date % type , p_end_date job_history.end_date % type , p_job_id job_history.job_id % type , p_department_id job_history.department_id % type ) IS BEGIN INSERT INTO job_history (employee_id, start_date, end_date, job_id, department_id) VALUES (p_emp_id, p_start_date, p_end_date, p_job_id, p_department_id); END add_job_history; -- 创建触发器调用存储过程... CREATE OR REPLACE TRIGGER update_job_history AFTER UPDATE OF job_id, department_id ON employees FOR EACH ROW BEGIN add_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id); END ;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927589.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!