• PL/SQL 数组


    目录

    创建Varray类型


            PL/SQL编程语言提供了一种称为VARRAY的数据结构,它可以存储相同类型元素的固定大小顺序集合。varray用于存储有序的数据集合,但通常最好将数组视为相同类型变量的集合。所有varray元素是由连续的内存位置组成。最低的地址对应第一个元素,而最后一个元素的地址最高。          数组是集合类型数据的一部分,表示可变大小的数组。 varray中的每个元素都具有与之相关联的索引。它还具有可以动态更改的容量(大小)。

    创建Varray类型

            使用CREATE TYPE语句创建varray类型。必须指定存储在varray中的元素的最大容量(大小)和类型。

    1、在模式(schema)级创建VARRAY类型的基本语法:

    CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>

    其中,

    • varray_type_name是一个有效的数组名称;
    • n是varray中元素的数量(数组长度);
    • element_type是元素的数据类型;

    可以使用ALTER TYPE语句更改变量的最大大小。

    例如:

    CREATE OR REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);

    2、在PL/SQL块中创建VARRAY类型的基本语法:

    TYPE varray_type_name IS VARRAY(n) of <element_type>

     例如:

    TYPE namearray IS VARRAY(5) OF VARCHAR2(10);

    3、实例

    1. DECLARE
    2. type namesarray IS VARRAY(5) OF VARCHAR2(10);
    3. type grades IS VARRAY(5) OF INTEGER;
    4. names namesarray;
    5. marks grades;
    6. total integer;
    7. BEGIN
    8. names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
    9. marks:= grades(98, 97, 78, 87, 92);
    10. total := names.count;
    11. dbms_output.put_line('Total '|| total || ' Students');
    12. FOR i in 1 .. total LOOP
    13. dbms_output.put_line('Student: ' || names(i) || 'Marks: ' || marks(i));
    14. END LOOP;
    15. END;
    16. /

      请注意:

    • 在Oracle环境中,varrays的起始索引始终为1。
    • 可以使用varray类型的构造方法初始化varray元素,该方法与varray具有相同的名称。
    • varray在声明时自动为NULL,并且必须在引用元素之前初始化它。

    4、实例2

            变量的元素也可以是任何数据库表的%ROWTYPE或任何数据库表字段的%TYPE表来引用表示,如:

    1. DECLARE
    2. CURSOR c_customers is SELECT name FROM customers;
    3. type c_list is varray (6) of customers.name%type;
    4. name_list c_list := c_list();
    5. counter integer :=0;
    6. BEGIN
    7. FOR n IN c_customers LOOP
    8. counter := counter + 1;
    9. name_list.extend; -- 使⽤extend申请空间,⼀次只申请⼀个空间长度
    10. name_list(counter) := n.name;
    11. dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
    12. END LOOP;
    13. END;
    14. /
  • 相关阅读:
    刷题整理(持续更新~)
    深入理解MySQL——理清访问权限控制系统
    ZED相机获取图像python
    Linux设置终端的个数(tty的个数)。
    达梦数据库学习操作记录
    虚拟桌面和云桌面办公系统
    CC++ Socket - TCP 与 UDP 网络编程
    聊一聊SqlSessionTemplate
    使用vi、vim、sed、echo、cat操作文件
    进程概念(跑路人笔记)
  • 原文地址:https://blog.csdn.net/weixin_42051619/article/details/125562465