oracle SQL引擎和PL/SQL引擎
2014-05-09 22:45
471 查看
如下图所示,PL/SQL引擎会执行过程化语句,但它把SQL语句发送给SQL引擎处理,然后SQL引擎把处理的结果返回给PL/SQL引擎。
PL/SQL和SQL引擎间的频繁切换会大大降低效率。典型的情况就是在一个循环中反复执行SQL语句。例如,下面的DELETE语句就会在FOR循环中被多次发送到SQL引擎中去:
初始化一些数据:
测试1:
测试2:
关键字FORALL能让PL/SQL引擎在将集合发送到SQL引擎之前,批量导入集合元素。虽然FORALL也包含了迭代的模式,但它并不是简单的FOR循环。
《PLSQL用户指南与参考》这本书里是这样写的,可是测试下来,并不是那样的。
PL/SQL和SQL引擎间的频繁切换会大大降低效率。典型的情况就是在一个循环中反复执行SQL语句。例如,下面的DELETE语句就会在FOR循环中被多次发送到SQL引擎中去:
初始化一些数据:
create table emp ( emp_id int primary key, deptno int not null );
declare l_deptno int; begin for i in 1..1000000 loop l_deptno := i mod 4; insert into emp values (i, l_deptno); end loop; commit; end;
测试1:
SQL> declare 2 type numlist is array(20) of number; 3 depts numlist := numlist(0,1,2,3); 4 begin 5 for i in depts.first .. depts.last loop 6 delete from emp where deptno = depts(i); 7 end loop; 8 commit; 9 end; 10 / PL/SQL 过程已成功完成。 已用时间: 00: 00: 48.93
测试2:
SQL> declare 2 type numlist is array(20) of number; 3 depts numlist := numlist(0,1,2,3); 4 begin 5 forall i in depts.first .. depts.last 6 delete from emp where deptno = depts(i); 7 commit; 8 end; 9 / PL/SQL 过程已成功完成。 已用时间: 00: 00: 54.21
关键字FORALL能让PL/SQL引擎在将集合发送到SQL引擎之前,批量导入集合元素。虽然FORALL也包含了迭代的模式,但它并不是简单的FOR循环。
《PLSQL用户指南与参考》这本书里是这样写的,可是测试下来,并不是那样的。
相关文章推荐
- oracle package pragma SERIALLY_REUSABLE(告诉PL/SQL 的运行时引擎,在数据引用之时不要保持包级数据。)
- Oracle中PL/SQL引擎和SQL引擎DATE类型的不同处理
- Oracle- PL/SQL DEV工具的使用收集
- ORACLE PL/SQL开发--bulk collect的用法
- 关于oracle pl/sql工具加锁的解决
- 不安装Oracle客户端使用PL/SQL远程连接数据库
- Oracle使用技巧及PL/SQL Developer配置 转载
- oracle:完整剖析PL/SQL DEVELOPER与SQL PLUS字符集设置
- 客户端PL/SQL如何连接oracle服务器
- Oracle PL/SQL入门之案例实践
- Oracle PL/SQL中使用%TYPE和%ROWTYPE的区别
- Oracle使用技巧及PL/SQL Developer配置
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
- PL/SQL Developer使用Oracle轻量客户端连接数据库
- 如何使用PL/SQL工具将excel中数据导入oracle库
- ORACLE PL/SQL编程--把游标说透
- ORACLE PL/SQL编程--PL/SQL块结构和组成元素
- 使用pl/sql工具对oracle的导入导出
- Oracle_PL/SQL 存储过程
- Oracle PL/SQL开发基础(第二弹:使用数据字典视图查看表约束)