美文网首页
Oracle PL/SQL (5) - 可变数组IS VARRA

Oracle PL/SQL (5) - 可变数组IS VARRA

作者: 乘风破浪的姐姐 | 来源:发表于2020-04-02 16:56 被阅读0次

    可变数组,是一种集合。一个可变数组是一个对象的集合,其中每个对象都具有相同的数据类型。可变数组的大小在创建时决定。在表中创建可变数组后,可变数组在主表中即为一个列。

    可变数组特性
    1)可变数组主要的特性即是元素的最大个数是有限制
    2)可变数组下标固定为1,上限可以扩展
    3)在可变数组声明时自动设置为NULL值.所谓的空值指的是集合本身是空,不是针对它所拥有的元素,故在元素引用前需要对其进行初始化

    可变数组创建语法:
    CREATE [OR REPLACE] TYPE 类型名称 IS VARRAY(长度) OF 数据类型;
    例如:定义一个可变数组类型 my_varray ,它的最大容量是5,元素类型是 VARCHAR2.

    create or replace type my_varray as varray(5) of varchar2(50);
    

    1、简单类型的可变数组

    declare
      type weeks is varray(12) of varchar2(50);
      my_week weeks:=weeks('星期一','星期二','星期三','星期四','星期五');  -- 定义一个类型为 weeks 的可变数组变量 my_week , 此时 my_week 是一个有5个元素的数组
    
    begin
      dbms_output.put_line('第三个元素为:'||my_week(3));
      dbms_output.put_line('第一个元素为:'||my_week.first);
      dbms_output.put_line('第二个元素:'||my_week.next(my_week.first));
      dbms_output.put_line('倒数第二个元素:'||my_week.prior(my_week.last));
    
      dbms_output.put_line('最大返回的元素个数:'||my_week.limit);--最大返回的元素个数
      
      my_week.extend(1);--集合扩充1个长度
      my_week(6):='星期六';
      my_week.extend(4,2); --集合扩充2个长度,使用原始集合的第2个数据填充
      
      my_week.trim(); --删除末尾的 1 个元素  
      my_week.trim(2);  -- 删除末尾的 2 个元素  
     
      dbms_output.put_line('最后一个元素为:'||my_week.last);
      
      dbms_output.put_line('总共有:'||my_week.count);
      
       if my_week.exists(4) then 
         dbms_output.put_line('第四个元素存在');
       end if;
       if not my_week.exists(10)then
          dbms_output.put_line('第十个元素不存在');
       end if;
      
       for i in my_week.first..my_week.last loop
           dbms_output.put_line('元素:'||i||'值 为:'||my_week(i));
       end loop;
       my_week.delete(); -- 删除所有元素
    end;
    

    2、定义TYPE类型的可变数组

     declare   
      type company_type is varray(20) of  emb.company.company_code%TYPE;
      v_companycode company_type:=company_type('1111111');  
    begin  
      select company_code into v_companycode(1) from emb.company  
      where company_name = '广东分公司';  
      dbms_output.put_line('公司code:'||v_companycode(1));  
    end;  
    

    输出结果:公司code:204

    3、定义二维可变数组

    declare  
      --一维数组  
      type first_varray_type is varray(10) of int;  
      --二维数组  
      type second_varray_type is varray(10) of first_varray_type;  
    --初始化  
      variable_varray second_varray_type:=second_varray_type(  
        first_varray_type(34,23,53,34),      
        first_varray_type(23,67,95),  
        first_varray_type(9,4)  
    );  
    begin  
      dbms_output.put_line('显示二维数组所有元素:');  
      for i in 1..variable_varray.count loop  
        for j in 1..variable_varray(i).count loop  
            dbms_output.put_line('variable_varray('||i||','||j||')='||variable_varray(i)(j));  
        end loop;  
      end loop;  
    end;  
    

    输出结果:

    显示二维数组所有元素:
    
    variable_varray(1,1)=34
    variable_varray(1,2)=23
    variable_varray(1,3)=53
    variable_varray(1,4)=34
    variable_varray(2,1)=23
    variable_varray(2,2)=67
    variable_varray(2,3)=95
    variable_varray(3,1)=9
    variable_varray(3,2)=4
    

    4、定义复合类型的可变数组

    CREATE OR REPLACE  TYPE cla_type AS OBJECT(
          v_claim_accidentno      varchar2(50),
          v_claim_version         number,
          v_claim_validflag       number
       );
     /
     
    declare 
       type claim_varray is varray(3) of cla_type;
       v_claim_varray claim_varray:= claim_varray(cla_type('AAA',1,1),cla_type('BBB',2,1),cla_type('CCC',3,0));
    begin
       for i in v_claim_varray.first..v_claim_varray.last loop
          DBMS_OUTPUT.put_line('事故号:'||v_claim_varray(i).v_claim_accidentno||'   版本号:'||v_claim_varray(i).v_claim_version||'  有效标识:'||v_claim_varray(i).v_claim_validflag);
       end loop;
    end;
    /
    

    输出结果:
    事故号:AAA 版本号:1 有效标识:1
    事故号:BBB 版本号:2 有效标识:1
    事故号:CCC 版本号:3 有效标识:0

    相关文章

      网友评论

          本文标题:Oracle PL/SQL (5) - 可变数组IS VARRA

          本文链接:https://www.haomeiwen.com/subject/awyxphtx.html