在本章中,无涯教程将讨论PL/SQL中的数组, PL/SQL编程语言提供了一种称为 VARRAY 的数据结构,该结构可以存储相同类型固定大小的顺序集合。
所有varray均包含连续的内存位置,最低地址对应于第一个元素,最高地址对应于最后一个元素。
数组是集合类型数据的一部分,它代表可变大小的数组。无涯教程将在后面的" PL/SQL集合" 中研究其他集合类型。
varray 中的每个元素都有一个与之关联的索引,它还具有可以动态更改的最大大小。
使用 CREATE TYPE 语句创建varray类型,您必须指定varray中存储的最大大小和元素类型。
在架构级别创建VARRAY类型的基本语法是-
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
可以使用 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 <element_type>
如-
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环境中,varray的起始索引始终为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.
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
HarmonyOS快速入门与实战 -〔QCon+案例研习社〕