oracle教程36 触发器(INSTEAD OF 触发器和系统触发器)

柔情只为你懂 2022-05-27 07:14 359阅读 0赞

INSTEAD OF 触发器

70

70 1

举例:

  1. --创建视图
  2. CREATE OR REPLACE VIEW emp_dept
  3. AS
  4. SELECT d.deptno,d.dname,e.empno,e.ename
  5. FROM dept d, emp e
  6. WHERE d.deptno = e.deptno;
  7. --创建替代触发器
  8. CREATE OR REPLACE TRIGGER instead_of_trigger
  9. INSTEAD OF
  10. INSERT
  11. ON emp_dept
  12. FOR EACH ROW
  13. DECLARE
  14. v_temp INT;
  15. BEGIN
  16. SELECT COUNT(*) INTO v_temp FROM dept WHERE deptno = :new.deptno;
  17. IF v_temp = 0 THEN
  18. INSERT INTO dept(deptno,dname)VALUES(:new.deptno,:new.dname);
  19. END IF;
  20. SELECT COUNT(*) INTO v_temp FROM emp WHERE empno = :new.empno;
  21. IF v_temp = 0 THEN
  22. INSERT INTO emp(empno,ename,deptno) VALUES(:new.empno,:new.ename,:new.deptno);
  23. END IF;
  24. END;
  25. --测试
  26. INSERT INTO emp_dept VALUES(50,'DEVELOPMENT',2222,'ALICE');
  27. SELECT * FROM EMP_DEPT

系统触发器(需要由系统用户才能创建)

70 2

70 3

举例:

  1. --连接sys用户
  2. --创建事件表
  3. CREATE TABLE event_table(
  4. event varchar2(50),
  5. event_time date
  6. );
  7. --再创建一个系统触发器
  8. create or replace trigger startup_trigger
  9. after startup on database
  10. begin
  11. insert into event_table values(ora_sysevent,SYSDATE);
  12. end;
  13. --在SQLPLUS窗口执行下列命令
  14. SHUTDOWN
  15. STARTUP
  16. SELECT * FROM event_table;

发表评论

表情:
评论列表 (有 0 条评论,359人围观)

还没有评论,来说两句吧...

相关阅读