📅  最后修改于: 2020-11-26 05:54:31             🧑  作者: Mango
在本章中,我们将讨论PL / SQL中的数组。 PL / SQL编程语言提供了一种称为VARRAY的数据结构,该结构可以存储相同类型的元素的固定大小的顺序集合。 varray用于存储数据的有序集合,但是通常最好将数组视为相同类型的变量的集合。
所有varray均包含连续的内存位置。最低地址对应于第一个元素,最高地址对应于最后一个元素。
数组是集合类型数据的一部分,它代表可变大小的数组。我们将在后面的章节“ PL / SQL集合”中研究其他集合类型。
varray中的每个元素都有与之关联的索引。它还具有可以动态更改的最大大小。
使用CREATE TYPE语句创建一个varray类型。您必须指定最大大小和存储在varray中的元素类型。
在架构级别创建VARRAY类型的基本语法是-
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of
哪里,
可以使用ALTER TYPE语句更改varray的最大大小。
例如,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
在PL / SQL块中创建VARRAY类型的基本语法是-
TYPE varray_type_name IS VARRAY(n) of
例如-
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
现在让我们通过一些例子来理解这个概念-
以下程序说明了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.
请注意–
在Oracle环境中,varrays的起始索引始终为1。
您可以使用varray类型的构造方法来初始化varray元素,该方法的名称与varray相同。
Varray是一维数组。
声明varray时,它会自动为NULL,并且必须先对其进行初始化,然后才能引用其元素。
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.