IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Oracle Varray变量

    royalwzy发表于 2015-07-15 08:01:04
    love 0
    [oracle@ucjmh ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Tue Jul 7 09:01:40 2015 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> set serveroutput on SQL> DECLARE — declare fixed array TYPE arry_num IS VARRAY(10) OF NUMBER; arry_top arry_num; v_n int; BEGIN — init array arry_top := arry_num(1,2,3); dbms_output.put_line(arry_top.LIMIT()); dbms_output.put_line(arry_top.count()); dbms_output.put_line(arry_top.FIRST()); –dbms_output.put_line(arry_top.NEXT()); — dbms_output.put_line(arry_top.PRIOR()); dbms_output.put_line(arry_top.LAST()); dbms_output.put_line(arry_top(2)); FOR I IN 1..arry_top.COUNT() LOOP v_n:=arry_top(I); dbms_output.put_line(v_n); DBMS_OUTPUT.PUT_LINE(‘arry_top(‘||I||’)=’ || arry_top(I)); END LOOP; END; / 10 3 1 3 2 1 arry_top(1)=1 2 arry_top(2)=2 3 arry_top(3)=3 PL/SQL procedure successfully completed. SQL> 声明和初始化VARRAY变量 你不可以直接声明一个VARRAY变量。必须先声明一个包含这个数组最大容量的类型: 1. TYPE MY_ARRAY_TYPE IS VARRAY(10) OF NUMBER; 然后,你就可以用这个类型声明VARRAY变量: 1. V MY_ARRAY_TYPE; 在你对这个数组进行操作以前,必须先初始化该数组。你既可以在声明它的时候对其初始化,也可以在声明后对其赋值。下面展示了在声明的同时对其进行初始化: 1. V MY_ARRAY_TYPE := MY_ARRAY_TYPE (); 从指定的条目处取值 把条目的数目作为下标。下标可以是返回整数值(该值小于或等于数组条目数)的任意表达式,如: 1. K := V(3); 2. I := 2; 3. L := V(I+1); 得到数组的容量 对VARRAY变量使用COUNT()方法。注意,你不需要指定圆括号,因为这个方法没有输入参数: 1. N_ENTRIES := V.COUNT(); 这告诉你这个数组中正在使用的条目数。当VARRAY类型被声明的时候,其最大的容量也就被定义了。你可以用LIMIT()方法得到该容量: 1. ARRAY_CAPACITY := V.LIMIT(); 遍历VARRAY中的值 你可以使用多种技术。最简单的是使用FOR循环: 1. FOR I IN 1..V.COUNT() LOOP 2. DBMS_OUTPUT.PUT_LINE(‘V(‘||I||’)=’ || V(I)); 3. END LOOP; 你也可以使用FIRST()和LAST()方法。FIRST()返回数组的第一个条目的下标(总是1),LAST()返回数组的最后一个条目的下标(与COUNT方法相同)。 1. FOR I IN V.FIRST()..V.LAST() LOOP 2. DBMS_OUTPUT.PUT_LINE(‘V(‘||I||’)=’ || V(I)); 3. END LOOP; 你也可以使用PRIOR(n)和NEXT(n)方法,这两个方法分别返回给定条目的前一个和后一个条目的下标。例如,下面的代码用来向后遍历整个数组: 1. I := V.COUNT(); 2. WHILE I IS NOT NULL LOOP 3. DBMS_OUTPUT.PUT_LINE(‘V(‘||I||’)=’ || V(I)); 4. I := V.PRIOR(I); 5. END LOOP; PRIOR(n)和n-1是一样的,NEXT(n)和n+1是一样的,但是PRIOR(1)和NEXT(V.COUNT())则返回NULL。 对VARRAY的扩展 使用EXTEND(k)方法。这个方法可以在VARRAY的最后追加k个新的条目。如果k没有被指定,只增加一个条目。新增的条目没有值(默认为NULL),但是你可以对它们进行初始化。COUNT()和LAST()方法现在可以反映VARRAY新的容量。以下代码向数组中添加两个条目并对其进行初始化: 1. I := V.LAST(); 2. V.EXTEND(2); 3. V(I+1) := 5; 4. V(I+2) := 6; 注意,你对VARRAY的扩展不可以超过其最大容量(通过LIMIT()方法得到),且在对VARRAY扩展前必须要对其进行初始化。以下代码是无效的: 1. VT MY_ARRAY_TYPE; 2. VT.EXTEND(5); 下面的代码是有效的: 1. VT MY_ARRAY_TYPE; 2. VT := MY_ARRAY_TYPE(); 3. VT.EXTEND(5); 对VARRAY的缩减 使用TRIM(k)方法。这个方法在VARRAY的尾部删除最后k个条目。当k没有被指定时,删除最后一个条目。已被删除的条目的值将丢失。COUNT()和LAST()方法反映了新的容量。下面从VARRAY中删除最后一个条目: 1. V.TRIM; 你也可以用以下方式删除数组中的所有条目: 1. V.TRIM(V.COUNT()); 或者用具有效果相同的DELETE()方法。该方法删除数组中的所有条目,并把其容量设置为0(也就是说,V.COUNT()现在的返回值为0)。 1. V.DELETE()


沪ICP备19023445号-2号
友情链接