Chinaunix首页 | 论坛 | 博客
  • 博客访问: 723565
  • 博文数量: 94
  • 博客积分: 1937
  • 博客等级: 上尉
  • 技术积分: 1618
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 18:46
个人简介

专注数据库开发管理

文章分类

全部博文(94)

文章存档

2015年(1)

2014年(2)

2013年(19)

2012年(32)

2011年(10)

2010年(30)

分类: Oracle

2012-12-11 16:30:41


  1. SQL> -- 一维固定数据

  2. SQL> DECLARE
  3.   2 TYPE type_array IS VARRAY(3) OF VARCHAR2(10);
  4.   3 v_array type_array:=type_array('abc','bcd','def');
  5.   4 BEGIN
  6.   5 FOR i IN 1..v_array.count LOOP
  7.   6 dbms_output.put_line(v_array(i));
  8.   7 END LOOP;
  9.   8 END;
  10.   9 /

  11. abc
  12. bcd
  13. def

  14. PL/SQL procedure successfully completed
  15. SQL> -- 一维可变数组

  16. SQL> DECLARE
  17.   2 TYPE type_tab IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
  18.   3 v_tab type_tab;
  19.   4 BEGIN
  20.   5     v_tab(1):='abc';
  21.   6     v_tab(2):='bcd';
  22.   7     v_tab(3):='cde';
  23.   8 FOR i IN 1..v_tab.count LOOP
  24.   9 dbms_output.put_line(v_tab(i));
  25.  10 END LOOP;
  26.  11 END;
  27.  12 /

  28. abc
  29. bcd
  30. cde

  31. PL/SQL procedure successfully completed
  32. SQL> -- 如果在定义类型type_tab时省略了INDEX BY BINARY_INTEGER,则必须用v_tab.extend语句“移动”行

  33. SQL> DECLARE
  34.   2 TYPE type_tab IS TABLE OF VARCHAR2(10);
  35.   3 v_tab type_tab := type_tab();
  36.   4 BEGIN
  37.   5     v_tab.extend;
  38.   6 v_tab(1):='abc';
  39.   7     v_tab.extend;
  40.   8 v_tab(2):='bcd';
  41.   9     v_tab.extend;
  42.  10 v_tab(3):='cde';
  43.  11 FOR i IN 1..v_tab.count LOOP
  44.  12 dbms_output.put_line(v_tab(i));
  45.  13 END LOOP;
  46.  14 END;
  47.  15 /

  48. abc
  49. bcd
  50. cde

  51. PL/SQL procedure successfully completed
  52. SQL> -- 查看yy表结构

  53. SQL> DESC yy;
  54. Name Type Nullable Default Comments
  55. ---- ------------ -------- ------- --------

  56. ID INTEGER Y
  57. NAME VARCHAR2(10) Y
  58. CODE CHAR(3) Y
  59. SQL> -- 多维数组

  60. SQL> DECLARE
  61.   2 TYPE type_tab IS TABLE OF yy%ROWTYPE INDEX BY BINARY_INTEGER;
  62.   3     v_tab type_tab;
  63.   4 BEGIN
  64.   5     -- 向变量数组v_tab填充数据

  65.   6     SELECT * BULK COLLECT INTO v_tab FROM yy;
  66.   7
  67.   8     -- 循环提取所有行

  68.   9 FOR i IN 1..v_tab.count LOOP
  69.  10         -- 每一行有三个数据分别打印

  70.  11         dbms_output.put(v_tab(i).id||' ');
  71.  12         dbms_output.put(v_tab(i).name||' ');
  72.  13         dbms_output.put_line(v_tab(i).code||' ');
  73.  14     END LOOP;
  74.  15 END;
  75.  16 /

  76. 1 ab a01
  77. 2 bb a02
  78. 3 cc a01
  79. 4 dd a03
  80. 5 ee a04
  81. 6 ff a05

  82. PL/SQL procedure successfully completed
  83. SQL> -- 也可以用record实现多维数组的功能

  84. SQL> DECLARE
  85.   2 -- 先定义record作为多维数组的类型

  86.   3 TYPE type_rec IS RECORD(ID INT ,CODE VARCHAR2(10) ,NAME CHAR(3));
  87.   4 TYPE type_tab IS TABLE OF type_rec INDEX BY BINARY_INTEGER;
  88.   5 v_tab type_tab;
  89.   6 BEGIN
  90.   7     -- 向变量数组v_tab填充数据

  91.   8 SELECT * BULK COLLECT INTO v_tab FROM yy;
  92.   9
  93.  10     -- 循环提取所有行

  94.  11 FOR i IN 1..v_tab.count LOOP
  95.  12         -- 每一行有三个数据分别打印

  96.  13 dbms_output.put(v_tab(i).id||' ');
  97.  14 dbms_output.put(v_tab(i).name||' ');
  98.  15 dbms_output.put_line(v_tab(i).code||' ');
  99.  16 END LOOP;
  100.  17 END;
  101.  18 /

  102. 1 a01 ab
  103. 2 a02 bb
  104. 3 a01 cc
  105. 4 a03 dd
  106. 5 a04 ee
  107. 6 a05 ff

  108. PL/SQL procedure successfully completed

  109. SQL>

阅读(4789) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~