oracle 数组

   日期:2020-10-30     浏览:90    评论:0    
核心提示:转自http://blog.chinaunix.net/uid-23072872-id-3436393.htmlSQL> -- 一维固定数据SQL> DECLARE 2 TYPE type_array IS VARRAY(3) OF VARCHAr2(10); 3 v_array type_array:=type_array('abc','bcd','def'); 4 BEGIN 5 FOR i IN 1..v_array.count LOOP 6 dbms_outpu

转自http://blog.chinaunix.net/uid-23072872-id-3436393.html

一维固定数组

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

abc
bcd
def

一维可变数组

SQL> DECLARE
  2 TYPE type_tab IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
  3 v_tab type_tab;
  4 BEGIN
  5     v_tab(1):='abc';
  6     v_tab(2):='bcd';
  7     v_tab(3):='cde';
  8 FOR i IN 1..v_tab.count LOOP
  9 dbms_output.put_line(v_tab(i));
 10 END LOOP;
 11 END;
 12 /

abc
bcd
cde
-------------------------------------------------
如果在定义类型type_tab时省略了INDEX BY BINARY_INTEGER,
则必须用v_tab.extend语句“移动”行
比如:
SQL> DECLARE
  2 TYPE type_tab IS TABLE OF VARCHAR2(10);
  3 v_tab type_tab := type_tab();
  4 BEGIN
  5     v_tab.extend;
  6 v_tab(1):='abc';
  7     v_tab.extend;
  8 v_tab(2):='bcd';
  9     v_tab.extend;
 10 v_tab(3):='cde';
 11 FOR i IN 1..v_tab.count LOOP
 12 dbms_output.put_line(v_tab(i));
 13 END LOOP;
 14 END;
 15 /

abc
bcd
cde

多维数组

先定义一个表yy,结构如下:
Name Type Nullable Default Comments
ID INTEGER Y
NAME VARCHAR2(10) Y
CODE CHAR(3) Y
-------------

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

  6     SELECt * BULK COLLECT INTO v_tab FROM yy;
  7
  8     -- 循环提取所有行

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

 11         dbms_output.put(v_tab(i).id||' ');
 12         dbms_output.put(v_tab(i).name||' ');
 13         dbms_output.put_line(v_tab(i).code||' ');
 14     END LOOP;
 15 END;
 16 /

1 ab a01
2 bb a02
3 cc a01
4 dd a03
5 ee a04
6 ff a05

--------------------------------------------------
SQL> -- 也可以用record实现多维数组的功能

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

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

  8 SELECt * BULK COLLECT INTO v_tab FROM yy;
  9
 10     -- 循环提取所有行

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

 13 dbms_output.put(v_tab(i).id||' ');
 14 dbms_output.put(v_tab(i).name||' ');
 15 dbms_output.put_line(v_tab(i).code||' ');
 16 END LOOP;
 17 END;
 18 /

1 a01 ab
2 a02 bb
3 a01 cc
4 a03 dd
5 a04 ee
6 a05 ff

PL/SQL procedure successfully completed

SQL>
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服