PL/SQL数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PL/SQL数组相关的知识,希望对你有一定的参考价值。
PL/SQL程序设计语言提供叫一种叫做VARRAY的数据结构,其可存储相同类型元素的一个固定大小的连续集合。VARRAY用于存储数据的有序集合,但它往往是更加有用认为数组作为相同类型的变量的集合。
在一个VARRAY每个元素都有与其相关联的索引。它还具有可以动态改变一个最大大小。
一、创建VARRAY类型
1. 一个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 就是所述数组的元素的数据类型。
2. VARRAY的最大长度可以使用ALTER TYPE语句来改变。
例如:
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
3. 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提示符执行时,它产生了以下结果: 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类型,它具有相同的名称变长数组的构造方法VARRAY元素
可变数组是一维阵列
一个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.
以上是关于PL/SQL数组的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?
如何获取 PL/SQL 关联数组 DS 的 NULL 条件检查