PL/SQL - 数组

  • 简述

    在本章中,我们将讨论 PL/SQL 中的数组。PL/SQL 编程语言提供了一种称为VARRAY,它可以存储相同类型元素的固定大小的顺序集合。varray 用于存储有序的数据集合,但通常最好将数组视为相同类型变量的集合。
    所有 varray 都由连续的内存位置组成。最低地址对应第一个元素,最高地址对应最后一个元素。
    PL/SQL 中的变量
    数组是集合类型数据的一部分,它代表可变大小数组。我们将在后面的章节中研究其他集合类型'PL/SQL Collections'.
    中的每个元素 varray有一个与之关联的索引。它还具有可以动态更改的最大大小。
  • 创建 Varray 类型

    一个 varray 类型是用 CREATE TYPE陈述。您必须指定存储在 varray 中的元素的最大大小和类型。
    在模式级别创建 VARRAY 类型的基本语法是 -
    
    CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
    
    在哪里,
    • varray_type_name是有效的属性名称,
    • n是变量中的元素数(最大值),
    • element_type是数组元素的数据类型。
    可以使用以下命令更改 varray 的最大大小 ALTER TYPE 陈述。
    例如,
    
    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

    以下程序说明了 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. 
    
    Please note
    • 在 Oracle 环境中,varrays 的起始索引始终为 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 | 
    +----+----------+-----+-----------+----------+ 
    
    以下示例使用 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.