创建 Varray 类型
一个 varray 类型是用 CREATE TYPE陈述。您必须指定存储在 varray 中的元素的最大大小和类型。
在模式级别创建 VARRAY 类型的基本语法是 -
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
在哪里,
- varray_type_name是有效的属性名称,
- n是变量中的元素数(最大值),
- element_type是数组元素的数据类型。
可以使用以下命令更改 varray 的最大大小 ALTER TYPE 陈述。
例如,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
在 PL/SQL 块中创建 VARRAY 类型的基本语法是 -
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
以下程序说明了 varrays 的使用 -
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.
Please note −
-
在 Oracle 环境中,varrays 的起始索引始终为 1。
-
您可以使用与 varray 同名的 varray 类型的构造函数方法来初始化 varray 元素。
-
Varray 是一维数组。
-
varray 在声明时自动为 NULL,并且必须在其元素被引用之前进行初始化。
示例 2
varray 的元素也可以是任何数据库表的 %ROWTYPE 或任何数据库表字段的 %TYPE。下面的例子说明了这个概念。
我们将使用存储在我们数据库中的 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 |
+----+----------+-----+-----------+----------+
以下示例使用 cursor,您将在单独的章节中详细研究。
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.