PL/SQL - 数组(Arrays)

PL/SQL - 数组(Arrays) 首页 / PL/SQL入门教程 / PL/SQL - 数组(Arrays)

在本章中,无涯教程将讨论PL/SQL中的数组, PL/SQL编程语言提供了一种称为 VARRAY 的数据结构,该结构可以存储相同类型固定大小的顺序集合。 

所有varray均包含连续的内存位置,最低地址对应于第一个元素,最高地址对应于最后一个元素。

Varrays in PL/SQL

数组是集合类型数据的一部分,它代表可变大小的数组。无涯教程将在后面的" PL/SQL集合" 中研究其他集合类型。

varray 中的每个元素都有一个与之关联的索引,它还具有可以动态更改的最大大小。

创建Varray

使用 CREATE TYPE 语句创建varray类型,您必须指定varray中存储的最大大小和元素类型。

在架构级别创建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;

现在让无涯教程通过一些示例来理解这个概念-

Varray示例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. 
  • 在Oracle环境中,varray的起始索引始终为1。

  • 您可以使用与varray名称相同的varray类型的构造方法来初始化varray元素。

  • Varray是一维数组。

  • varray在声明时会自动为NULL,并且必须先初始化才能引用其元素。

Varray示例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. 

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

玩转Git三剑客 -〔苏玲〕

TypeScript开发实战 -〔梁宵〕

Linux内核技术实战课 -〔邵亚方〕

性能优化高手课 -〔尉刚强〕

Redis源码剖析与实战 -〔蒋德钧〕

HarmonyOS快速入门与实战 -〔QCon+案例研习社〕

说透低代码 -〔陈旭〕

商业思维案例笔记 -〔曹雄峰〕

深入拆解消息队列47讲 -〔许文强〕

好记忆不如烂笔头。留下您的足迹吧 :)