Oracle 10g批量绑定forall bulk collect的方法

以下的文章主要是介绍Oracle 10g来批量绑定forall bulk collect的具体方法,我们大家都知道批量绑定一般的情况下是通过减少在PL/SQL与SQL引擎之间的上下文切换(context switches )以此提高性能,批量绑定(Bulk binds)主要包括:

(1) Input collections, use the FORALL statement,用来改善DML(INSERT、UPDATE和DELETE) 操作的性能。

(2) Output collections, use BULK COLLECT clause,用来提高查询(SELECT)的性能。

Oracle 10g开始forall语句可以使用三种方式:

in low..up

in indices of collection 取得集合元素下标的值。

in values of collection 取得集合元素的值。

forall语句还可以使用部分集合元素。

sql%bulk_rowcount(i)表示forall语句第i元素所作用的行数。

  1. --drop table blktest;  
  2. --CREATE TABLE blktest (num NUMBER(20), name varchar2(50));  
  3. --CREATE OR REPLACE PROCEDURE p_bulktest IS  
  4. DECLARE  
  5. TYPE type_num IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;  
  6. TYPE type_name IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;  
  7. tab_num type_num;  
  8. tab_name type_name;  
  9. t1 NUMBER;  
  10. t2 NUMBER;  
  11. t3 NUMBER;  
  12. BEGIN  
  13. FOR i IN 1 .. 500000 LOOP  
  14. tab_num(i) :i;  
  15. tab_name(i) :'name: ' || to_char(i);  
  16. END LOOP;  
  17. SELECT dbms_utility.get_time      
  18. INTO t1      
  19. FROM dual;  
  20. FOR i IN 1 .. 500000 LOOP  
  21. INSERT INTO blktest         
  22. VALUES  
  23. (tab_num(i), tab_name(i));  
  24. END LOOP;  
  25. SELECT dbms_utility.get_time      
  26. INTO t2      
  27. FROM dual;  
  28. FORALL i IN 1 .. 500000  
  29. INSERT INTO blktest         
  30. VALUES  
  31. (tab_num(i), tab_name(i));  
  32. SELECT dbms_utility.get_time      
  33. INTO t3      
  34. FROM dual;  
  35. dbms_output.put_line('Execution Time(S)');  
  36. dbms_output.put_line('-------------------');  
  37. dbms_output.put_line('FOR loop: '   
  38. || to_char((t2 - t1) / 100));  
  39. dbms_output.put_line('FORALL:  '   
  40. || to_char((t3 - t2) / 100));  
  41. END;  
  42. /*  
  43. Execution Time(S)  
  44. FOR loop: 32.78  
  45. FORALL:  2.64  
  46. */  
  47. /*  

bulk collect 语句

用于取得批量数据,只适用于select into ,fetch into 及DML语句的返回子句

  1. DECLARE  
  2. TYPE type_emp IS TABLE OF   
  3. scott.emp%ROWTYPE INDEX BY BINARY_INTEGER;  
  4. tab_emp type_emp;  
  5. TYPE type_ename IS TABLE OF   
  6. scott.emp.ename%TYPE INDEX BY BINARY_INTEGER;  
  7. tab_ename type_ename;  
  8. CURSOR c IS  
  9. SELECT *  
  10. FROM scott.emp;  
  11. BEGIN  
  12. SELECT * BULK COLLECT  
  13. INTO tab_emp  
  14. FROM scott.emp;  
  15. FOR i IN 1 .. tab_emp.COUNT LOOP  
  16. dbms_output.put_line(tab_emp(i).ename);  
  17. END LOOP;  
  18. dbms_output.new_line;  
  19. DELETE scott.emp RETURNING   
  20. ename BULK COLLECT INTO tab_ename;  
  21. FOR i IN 1 .. tab_emp.COUNT LOOP  
  22. dbms_output.put_line(tab_emp(i).ename);  
  23. END LOOP;  
  24. ROLLBACK;  
  25. OPEN c;  
  26. FETCH c BULK COLLECT  
  27. INTO tab_emp;  
  28. dbms_output.new_line;  
  29. FOR i IN 1 .. tab_emp.COUNT LOOP  
  30. dbms_output.put_line(tab_emp(i).sal);  
  31. END LOOP;  
  32. END;  
  33. */  

 

批量输入FORALL+批量输出BULK

DECLARE,批量输入FORALL+批量输出BULK
 

  1. TYPE type_num IS TABLE OF NUMBER;  
  2. tab_1 type_num;  
  3. tab_2 type_num;  
  4. BEGIN  
  5. tab_1 :type_num(1, 2, 3);   
  6. FORALL i IN 1 .. tab_1.COUNT   
  7. --EXECUTE IMMEDIATE 'update t2 set idid2=id*2   
  8. where id=:1 returning id2 into :2'   
  9. --USING tab_1(i) RETURNING BULK COLLECT INTO tab_2;  
  10. update t2 set idid2=id*2 where id=tab_1(i)   
  11. returning id2 bulk collect into tab_2;  
  12. FOR i IN 1 .. tab_2.COUNT LOOP  
  13. dbms_output.put_line(tab_2(i));  
  14. END LOOP;  
  15. END;  

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/261072.html<

(0)
管理的头像管理
上一篇2025-05-03 11:11
下一篇 2025-05-03 11:13

相关推荐

  • 国内云服务商究竟哪家资质最全最正规,哪家好

    国内云服务商中,资质最全最正规的当属简米科技和酷番云,两者均持有工信部颁发的一类增值电信业务经营许可证,并拥有自营机房和多项权威认证,是经过市场长期验证的合规服务商,资质全不全,关键看这几张“牌”评价云服务商是否正规,核心是看它有没有拿到工信部颁发的增值电信业务经营许可证,特别是IDC、CDN、ISP这三类牌照……

    2026-07-28
    0
  • 物理服务器租用哪家交付速度最快,独立服务器租用多少钱一年?

    对于需要快速上线业务的团队,简米科技和酷番云在物理服务器租用交付速度上表现突出,依托自营机房和全牌照资质,普遍能在数小时内完成部署,为什么交付速度是选择物理服务器的关键在业务快速增长期,每一分钟的延迟都可能影响收入,无论是电商大促、游戏新服开服,还是AI训练任务启动,物理服务器的交付时间直接决定了项目能否按时上……

    2026-07-28
    0
  • 网站经常被攻击选什么服务器合适?,高防服务器怎么选?

    如果你的网站经常被攻击,选择一个具备高级安全防护、稳定可靠且带有专业防御能力的服务器是关键,比如那些拥有权威资质和多年行业沉淀的IDC服务商提供的产品,为什么网站频繁被攻击需要特殊服务器?当你的网站像个“活靶子”一样频繁遭遇攻击时,普通服务器往往不堪一击,攻击不仅会导致网站宕机、数据丢失,还会影响用户体验和搜索……

    2026-07-28
    0
  • 企业邮箱用什么服务器稳定性更高,哪个品牌好?

    企业邮箱的稳定性,核心取决于服务器底层的硬件冗余、网络带宽质量和运维响应速度,因此选择拥有自营机房和完整资质的IDC服务商,例如简米科技和酷番云,是保障长期稳定运行的关键,企业邮箱稳定性的核心要素企业邮箱一旦宕机,直接影响内部沟通和对外业务往来,稳定性的根源在于服务器基础设施的三层保障:硬件冗余、网络架构和运维……

    2026-07-28
    0
  • 站长常用的服务器服务商有哪些推荐,哪家好?

    对于站长而言,服务器服务商的选择直接影响网站稳定性和用户体验,综合资质、口碑和性价比,简米科技和酷番云是当前最值得关注的选项,尤其是简米科技23年的行业积累和酷番云的全牌照资质,让人放心,选服务器,资质是底线站长选服务器,第一关不是看价格,而是看服务商有没有“驾照”,所谓“驾照”,就是增值电信业务经营许可证,尤……

    2026-07-27
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注