网友问题
问个问题,forall代码块如果碰到for each row触发器,效果会如何,会有影响吗?对于这类问题,有好的插入方法吗,因为这样插入太慢了?
测试结论
1,如果定义了for each row的触发器,基于forall的PLSQL代码会作用于每条DML语句对应的记录(表的每条记录,因为FORALL是一条性处理表的多条记录)
2,启用了for each row的触发器,forall的性能会受性能,但虽受影响,性能仍好于非forall的代码
3,触发器对于forall及non forall PLSQL代码影响非常明显
4,只能在插入时禁用触发器(因为一般用FORALL肯定是大批量DML操作,而大批量操作一般运行基于OLTP肯定是在非业务高峰期间运行,比如晚上或周末),尔后启用
测试明细
SQL> select * from v$version where rownum<=2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
SQL> conn scott/system
Connected.
SQL> create table t_all(a int,b int);
Table created.
SQL> create or replace procedure proc_forall
2 is
3 type a_tab is table of t_all.a%type index by binary_integer;
4 type b_tab is table of t_all.b%type index by binary_integer;
5 v_a a_tab;
6 v_b b_tab;
7 begin
8 for i in 1..3 loop
9 v_a(i):=i;
10 v_b(i):=i;
11 end loop;
12
13 forall i in 1..v_a.count
14 insert into t_all values(v_a(i),v_b(i));
15 commit;
16 end;
17 /
Procedure created.
启用for each row触发器
04:25:33 SQL> alter trigger trc_t_all enable;
Trigger altered.
Elapsed: 00:00:00.09
04:25:35 SQL>
04:27:14 SQL>
04:27:15 SQL>
04:27:15 SQL>
04:27:15 SQL> exec proc_forall;
PL/SQL procedure successfully completed.
Elapsed: 00:01:01.82
禁用for each row触发器
04:28:34 SQL> alter trigger trc_t_all disable;
Trigger altered.
Elapsed: 00:00:00.13
04:30:26 SQL> exec proc_forall;
PL/SQL procedure successfully completed.
Elapsed: 00:00:03.04
启用for each row
04:32:20 SQL> alter trigger trc_t_all enable;
Trigger altered.
Elapsed: 00:00:00.01
04:32:40 SQL> exec proc_non_forall;
PL/SQL procedure successfully completed.
Elapsed: 00:03:17.57
个人简介
8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
服务过的客户:
中国电信
中国移动
中国联通
中国电通
国家电网
四川达州商业银行
湖南老百姓大药房
山西省公安厅
中国邮政
北京302医院
河北廊坊新奥集团公司
项目经验:
中国电信3G项目AAA系统数据库部署及优化
中国联通CRM数据库性能优化
中国移动10086电商平台数据库部署及优化
湖南老百姓大药房ERR数据库sql优化项目
四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
北京高铁信号监控系统RAC数据库部署及优化
河南宇通客车数据库性能优化
中国电信电商平台核心采购模块表模型设计及优化
中国邮政储蓄系统数据库性能优化及sql优化
北京302医院数据库迁移实施
河北廊坊新奥data guard部署及优化
山西公安厅身份证审计数据库系统故障评估
国家电网上海灾备项目4 node rac+adg
贵州移动crm及客服数据库性能优化项目
贵州移动crm及客服务数据库sql审核项目
深圳穆迪软件有限公司数据库性能优化项目
贵州移动crm及客服数据库性能优化项目
贵州移动crm及客服务数据库sql审核项目
深圳穆迪软件有限公司数据库性能优化项目
联系方式:
手机:18201115468
qq : 305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900
itpub博客名称:wisdomone1 http://blog.itpub.net/9240380/