- PL/SQL 教程
- PL/SQL - 主页
- PL/SQL - 概述
- PL/SQL - 环境
- PL/SQL - 基本语法
- PL/SQL - 数据类型
- PL/SQL - 变量
- PL/SQL - 常量和文字
- PL/SQL - 运算符
- PL/SQL - 条件
- PL/SQL - 循环
- PL/SQL - 字符串
- PL/SQL - 数组
- PL/SQL - 过程
- PL/SQL - 函数
- PL/SQL - 游标
- PL/SQL - 记录
- PL/SQL - 异常
- PL/SQL - 触发器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事务
- PL/SQL - 日期和时间
- PL/SQL - DBMS 输出
- PL/SQL - 面向对象
- PL/SQL 有用资源
- PL/SQL - 问题与解答
- PL/SQL - 快速指南
- PL/SQL - 有用的资源
- PL/SQL - 讨论
PL/SQL - 数组
在本章中,我们将讨论 PL/SQL 中的数组。PL/SQL 编程语言提供了一种称为VARRAY的数据结构,它可以存储相同类型元素的固定大小的顺序集合。varray 用于存储有序的数据集合,但通常最好将数组视为相同类型变量的集合。
所有变量数组都由连续的内存位置组成。最低地址对应于第一个元素,最高地址对应于最后一个元素。
数组是集合类型数据的一部分,它代表可变大小数组。我们将在后面的“PL/SQL 集合”一章中研究其他集合类型。
可变数组中的每个元素都有一个与其关联的索引。它还具有可以动态更改的最大大小。
创建 Varray 类型
varray 类型是使用CREATE TYPE语句创建的。您必须指定变量数组中存储的元素的最大大小和类型。
在模式级别创建 VARRAY 类型的基本语法是 -
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
在哪里,
- varray_type_name是有效的属性名称,
- n是 varray 中的元素数量(最大),
- 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;
现在让我们举几个例子来理解这个概念 -
实施例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 环境中,vararray 的起始索引始终为 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 | +----+----------+-----+-----------+----------+
以下示例使用了光标,您将在单独的章节中详细研究它。
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.