ORACLE 集合(关联数组,嵌套表,VARRAY)

来源:互联网 发布:mac系统重装多少钱 编辑:程序博客网 时间:2024/05/21 03:57
三种集合比较 元素下标个数限制初始化表数据列索引表(binary_integer、pls_integer、varchar2)无限制不需要不可以嵌套表从1开始无限制需要可以数组从1开始有最大个数需要可以

   

1.索引表

type type_name is table of element_type[not null] index by key_type;

type_name 自定义数据类型的名称

is table .. index  表示索引表

element_type 索引表元素的数据类型

not null 表示不请允许引用null元素

key_type(binary_integer、pls_integer、varchar2) 索引表元素下标的数据类型,注意9i前只能用binary_integer、pls_integer

元素下标可以负值,元素大小个数没有限制

  1. set serveroutput on;  
  2. declare  
  3.   type ename_table_type is table of emp.ename%type index by binary_integer;  
  4.   ename_table ename_table_type;  
  5. begin  
  6.   select ename into ename_table(-1) from emp where empno = 7788;  
  7.   dbms_output.put_line('雇员名:' || ename_table(-1));  
  8. end;  
  9. /  
  1. 雇员名:SCOTT  
  2.    
  3. PL/SQL procedure successfully completed  

 2.嵌套表

type type_name is table of element_type;

元素下标从1开始,元素个数没有限制,数组元素值可以稀疏

使用嵌套表元素时,必须首先使用其构造方法初始化嵌套表

  1. set serveroutput on;  
  2. declare  
  3.   type ename_table_type is table of emp.ename%type;  
  4.   ename_table ename_table_type;  
  5. begin  
  6.   ename_table:=ename_table_type('A','A');  
  7.   select ename into ename_table(2) from emp where empno = 7788;  
  8.   dbms_output.put_line('雇员名:' || ename_table(2));  
  9. end;  
  10. /  
  11. 雇员名:SCOTT  
  12.    
  13. PL/SQL procedure successfully completed  

嵌套表还可以作为表列的数据类型使用

  1. create type phone_type is table of varchar2(20);  
  2. /  
  3. create table employee(  
  4. id number(4),name varchar2(10),sal number(6,2) ,phone phone_type  
  5. )nested table phone store as phone_table;  
  6. /  
  7. --insert  
  8. insert into employee  
  9. values  
  10.   (1, 'scott', 800, phone_type('123456''789012'));  
  11. commit;  
  12. --select  
  13. declare  
  14.   phone_table phone_type;  
  15. begin  
  16.   select phone into phone_table from employee where id=1;  
  17.   for i in 1..phone_table.count loop  
  18.     dbms_output.put_line('电话号码:'||phone_table(i));  
  19.   end loop;  
  20. end;  
  21. /  
  22. 电话号码:123456  
  23. 电话号码:789012  
  24.    
  25. PL/SQL procedure successfully completed  
  26. --update  
  27. declare  
  28.   phone_table phone_type:=phone_type('11','22','33');  
  29. begin  
  30.   update employee set phone=phone_table where id=1;  
  31.   commit;  
  32. end;  
  33. /  


3.变长数组varray

type type_name is varray(size_limit) of element_type[not null];

size_limit 指定varray元素的最大个数

元素下标从1开始,最大元素有限制,可以当作表数据列

使用前,必须要使用构造方法初始化varray元素

  1. declare  
  2.   type ename_table_type is varray(10) of emp.ename%type;--元素最大个数定义后不可改变  
  3.   ename_table ename_table_type := ename_table_type('A','B');--初始化两个元素,可以通过ename_table.extend方法添加元素,默认为null,不能超过最大个数  
  4. begin  
  5.   select ename into ename_table(1) from emp where empno=7788; --下标从1开始,没有初始的不能直接使用,如ename_table(3)错  
  6.   dbms_output.put_line(ename_table(1));  
  7. end;  
  8. /  
  9. SCOTT  
  10. PL/SQL procedure successfully completed  


在表列中使用varray

  1. create type phone_type is varray(10) of varchar2(20);  
  2. /  
  3. create table employee(  
  4. id number(4),name varchar2(10),sal number(6,2),phone phone_type  
  5. );  
  6. /  
  7. --操作跟嵌套表列一样,元素个数有限制  
0 0
原创粉丝点击