Oracle 存储过程 遍历 游标 数据集 效率比较 男娘i 2022-04-02 07:52 359阅读 0赞 # Oracle中游标使用效率比较 # 2013年09月26日 21:09:08 [進擊的胖蛇][Link 1] 阅读数:4380 鸣谢:[http://blog.163.com/gaoyutong122@126/blog/static/344697322012725344964/][http_blog.163.com_gaoyutong122_126_blog_static_344697322012725344964] 扩展:[http://www.cnblogs.com/rootq/archive/2008/11/17/1335491.html][http_www.cnblogs.com_rootq_archive_2008_11_17_1335491.html] ### [批量SQL之 BULK COLLECT 子句][SQL_ BULK COLLECT]:[http://blog.csdn.net/leshami/article/details/7545597][SQL_ BULK COLLECT] ### 对300万一张表数据,用游标进行循环,不同写法的效率比较 1、显式游标 declare cursor cur\_2 is select a.cust\_name from ea\_cust.cust\_info a; cust\_id varchar2(100); begin open cur\_2; loop fetch cur\_2 into cust\_id; exit when cur\_2%notfound; NULL; end loop; close cur\_2; end; \--耗时48秒 2、隐式游标 declare begin for cur\_ in (select c.cust\_name from ea\_cust.cust\_info c) loop NULL; [www.2cto.com][] end loop; end; \--耗时16秒 3、bulk collect into + cursor declare cursor cur\_3 is select a.cust\_name from ea\_cust.cust\_info a; type t\_table is table of varchar2(100); c\_table t\_table; to\_cust\_id varchar2(100); begin open cur\_3; loop fetch cur\_3 bulk collect into c\_table limit 100; exit when c\_table.count = 0; for i in c\_table.first..c\_table.last loop null; end loop; end loop; commit; end; \--耗时13秒,看样子这种最快 [https://blog.csdn.net/Hollboy/article/details/12068045][https_blog.csdn.net_Hollboy_article_details_12068045] # Oracle中IS TABLE OF的使用 # 2017年04月23日 18:33:12 [pan\_junbiao][pan_junbiao] 阅读数:9804 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pan\_junbiao/article/details/70537582 IS TABLE OF :指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型。 INDEX BY BINARY\_INTEGER:指索引组织类型 BULK COLLECT :指是一个成批聚合类型,简单的来说 , 它可以存储一个多行多列存储类型,采用BULK COLLECT可以将查询结果一次性地加载到集合中。 【实例】在SCOTT模式下,使用IS TABLE OF获取所有员工的姓名,职务,工资信息。 1. `declare` 2. `type type_ename is table of emp.ename%type;` 3. `type type_job is table of emp.job%type;` 4. `type type_sal is table of emp.sal%type;` 5. 6. `var_ename type_ename:=type_ename();` 7. `var_job type_job:=type_job();` 8. `var_sal type_sal:=type_sal();` 9. `begin` 10. `select ename,job,sal` 11. `bulk collect into var_ename,var_job,var_sal` 12. `from emp;` 13. 14. `/*输出雇员信息*/` 15. `for v_index in var_ename.first .. var_ename.last loop` 16. `dbms_output.put_line('雇员名称:'||var_ename(v_index)||' 职务:'||var_job(v_index)||' 工资:'||var_sal(v_index));` 17. `end loop;` 18. `end;` 【实例】在SCOTT模式下,使用IS TABLE OF获取所有员工的所有信息。 1. `declare` 2. `type emp_table_type is table of emp%rowtype index by binary_integer;` 3. `var_emp_table emp_table_type;` 4. `begin` 5. `select *` 6. `bulk collect into var_emp_table` 7. `from emp;` 8. 9. `/*输出雇员信息*/` 10. `for i in 1..var_emp_table.COUNT loop` 11. `dbms_output.put_line('雇员名称:'||var_emp_table(i).ename||' 职务:'||var_emp_table(i).job||' 工资:'||var_emp_table(i).sal);` 12. `end loop;` 13. `end;` [https://blog.csdn.net/pan\_junbiao/article/details/70537582][https_blog.csdn.net_pan_junbiao_article_details_70537582] [Link 1]: https://me.csdn.net/Hollboy [http_blog.163.com_gaoyutong122_126_blog_static_344697322012725344964]: http://blog.163.com/gaoyutong122@126/blog/static/344697322012725344964/ [http_www.cnblogs.com_rootq_archive_2008_11_17_1335491.html]: http://www.cnblogs.com/rootq/archive/2008/11/17/1335491.html [SQL_ BULK COLLECT]: http://blog.csdn.net/leshami/article/details/7545597 [www.2cto.com]: http://www.2cto.com/ [https_blog.csdn.net_Hollboy_article_details_12068045]: https://blog.csdn.net/Hollboy/article/details/12068045 [pan_junbiao]: https://me.csdn.net/pan_junbiao [https_blog.csdn.net_pan_junbiao_article_details_70537582]: https://blog.csdn.net/pan_junbiao/article/details/70537582
还没有评论,来说两句吧...