ITPub博客

首页 > 数据库 > Oracle > 触发器尽量考虑内部代码过程的封装(在11g中没有差别)

触发器尽量考虑内部代码过程的封装(在11g中没有差别)

原创 Oracle 作者:luisedalian 时间:2014-01-16 10:11:37 0 删除 编辑

点击(此处)折叠或打开

  1. --触发器执行的代码尽量考虑使用存储过程进行封装
  2. DROP TABLE t1;
  3. DROP TABLE t2;
  4. CREATE TABLE t1 AS SELECT ename, empno, deptno FROM scott.emp;
  5. CREATE TABLE t2 AS SELECT deptno, count(*) as cnt FROM t1 group by deptno;

  6. CREATE OR REPLACE TRIGGER tri_t1_insert
  7. AFTER INSERT ON t1
  8. FOR EACH ROW
  9. BEGIN
  10.   INSERT INTO t2(deptno, cnt) VALUES(:new.deptno, 1);
  11. END tri_t1_insert;
  12. /

  13. ALTER SESSION SET TRACEFILE_IDENTIFIER = \'LUISE_OPTIMIZER\';
  14. ALTER SESSION SET EVENTS \'10046 trace name context forever, level 8\';
  15. INSERT INTO t1(ename, empno, deptno) VALUES(\'luise\', 666, 8);
  16. INSERT INTO t1(ename, empno, deptno) VALUES (\'luise\', 777, 8);
  17. COMMIT;
  18. ALTER SESSION SET EVENTS \'10046 trace name context off\';

  19. col name for a25
  20. col value for a60
  21. select * from v$diag_info;

[oracle@S1011:/export/home/oracle]$ cd /u01/app/oracle/diag/rdbms/testdb11/TestDB11/trace

[oracle@S1011:/u01/app/oracle/diag/rdbms/testdb11/TestDB11/trace]$ ls *LUISE_OPTIMIZER*.trc

TestDB11_ora_914_LUISE_OPTIMIZER.trc        

 

tkprof TestDB11_ora_914_LUISE_OPTIMIZER.trc 1.txt  sys=no sort=prsela,exeela,fchela

--查看1.txt确定insert into t2...语句被解析的次数



点击(此处)折叠或打开

  1. --改变触发器的定义,使用存储过程封装具体执行的代码
  2. CREATE OR REPLACE PROCEDURE proc_tri(p_deptno IN NUMBER)
  3. AS
  4. BEGIN
  5.   INSERT INTO t2(deptno, cnt) VALUES(p_deptno, 1);
  6. END;
  7. /

  8. CREATE OR REPLACE TRIGGER tri_t1_insert
  9. AFTER INSERT ON t1
  10. FOR EACH ROW
  11. BEGIN
  12.   proc_tri(:new.deptno);
  13. END tri_t1_insert;
  14. /


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1071345/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 避免动态SQL(一)
请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6040893