PL / SQL数组
PL / SQL程序设计语言提供了一种数据结构被称为VARRAY,其可以存储相同类型的元素的一个固定大小的连续集合。一个VARRAY用于存储数据的有序集合,但认为阵列为一体的相同类型的变量的集合是往往更为有用。
所有可变数组由连续存储单元。最低的地址对应于第一元件和最高地址的最后一个元素。

阵列是集合类型的数据的一部分,并且它代表可变大小的数组。我们将在后面的章节“PL / SQL集合”研究其他集合类型。
在一个VARRAY的每个元素具有与之相关联的索引。它还具有可以动态改变一个最大大小。
创建VARRAY类型
一个VARRAY类型是用CREATE TYPE语句创建。必须指定的最大大小,并存储在VARRAY元素的类型。
在架构层面创造一个VRRAY类型的基本语法是:
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
哪里,
varray_type_name是一个有效的属性名称,
n是VARRAY元件(最大值)的数量,
ELEMENT_TYPE是阵列中的元素的数据类型。
一个VARRAY的最大尺寸可以使用ALTER TYPE语句进行更改。
例如,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10); / Type created.
对于内的PL / SQL块是创建一个VRRAY类型的基本语法:
TYPE varray_type_name IS VARRAY(n) of <element_type>
例如:
TYPE namearray IS VARRAY(5) OF VARCHAR2(10); Type grades IS VARRAY(5) OF INTEGER;
例1
下面的程序说明了使用可变数组:
DECLARE
type namesarray IS VARRAY(5) OF VARCHAR2(10);
type grades IS VARRAY(5) OF INTEGER;
names namesarray;
marks grades;
total integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := names.count;
dbms_output.put_line('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
dbms_output.put_line('Student: ' || names(i) || '
Marks: ' || marks(i));
END LOOP;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
Total 5 Students Student: Kavita Marks: 98 Student: Pritam Marks: 97 Student: Ayan Marks: 78 Student: Rishav Marks: 87 Student: Aziz Marks: 92 PL/SQL procedure successfully completed.
请注意:
在Oracle环境中,可变数组的起始索引始终为1。
您可以初始化使用VARRAY类型,它具有相同的名称变长数组的构造方法的变长数组元素。
可变数组是一维数组。
当它被宣布其元素可以被引用之前,必须初始化一个变长数组是自动NULL。
例2
一个VARRAY的元素也可以是任何数据库表字段中的任何数据库表或%TYPE的ROWTYPE%。下面的例子说明了这一概念:
我们将使用存储在我们的数据库CUSTOMERS表:
Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+----------+
下面的例子利用游标 ,您将详细单独的一章学习。
DECLARE
CURSOR c_customers is
SELECT name FROM customers;
type c_list is varray (6) of customers.name%type;
name_list c_list := c_list();
counter integer :=0;
BEGIN
FOR n IN c_customers LOOP
counter := counter + 1;
name_list.extend;
name_list(counter) := n.name;
dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
END LOOP;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
Customer(1): Ramesh Customer(2): Khilan Customer(3): kaushik Customer(4): Chaitali Customer(5): Hardik Customer(6): Komal PL/SQL procedure successfully completed.