联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.9.6.9 VARRAY
更新时间:3/26/2024, 2:50:04 AM
定义数组类型及变量
  • 定义数组类型

    语法:

    DECLARE TYPE <array-type-name> AS <data-type> ARRAY[int-constant];
    复制

    示例:

    DECLARE TYPE v_array AS INT ARRAY(5);
    复制

    此处声明一个数组类型的数据类型,名称为 v_array,该数组可以存放 5 个整数类型的数据。

  • 声明该类型的数组变量

    语法:

    DECLARE <array-name> <array-type-name>
    复制

    示例:

    DECLARE age_array v_array
    复制

    此处声明一个 v_array 类型的变量 age_array。

数组变量的赋值

与基本变量的赋值类似,数组变量的赋值语句通常也包括 SET,SELECT …​INTO,VALUES …​INTO 等几种形式,接下来将以案例的形式,介绍几种赋值语句的具体使用。

SET

使用示例一

!set plsqlUseSlash true
BEGIN
  -- 声明一个 ARRAY 类型的数据类型 age_array,可以存放 5 个整数类型的数据。
  DECLARE TYPE age_array AS INT ARRAY[5];
  -- 声明一个 age_array 类型的变量 v_age_array。
  DECLARE v_age_array age_array;
  -- 给变量 v_age_array 中 5 个整数类型的变量同时赋值。
  SET v_age_array = ARRAY[18,19,20,21,22,23];
END;
/
复制

使用示例二

!set plsqlUseSlash true
BEGIN
  -- 声明一个 ARRAY 类型的数据类型 age_array,可以存放 5 个整数类型的数据。
  DECLARE TYPE age_array AS INT ARRAY[5];
  -- 声明一个 age_array 类型的变量 v_age_array。
  DECLARE v_age_array age_array;
  -- 使用关键字 SET 分别给变量 v_age_array 中 5 个整数类型的变量赋值。
  SET v_age_array(1) = 30;
  SET v_age_array(2) = 31;
  SET v_age_array(3) = 32;
  SET v_age_array(4) = 33;
  SET v_age_array(5) = 34;
END;
/
复制
VALUES …​ INTO

使用示例

!set plsqlUseSlash true
BEGIN
  -- 声明一个 ARRAY 类型的数据类型 age_array,可以存放 5 个整数类型的数据。
  DECLARE TYPE age_array AS INT ARRAY[5];
  -- 声明一个age_array类型的变量v_age_array。
  DECLARE v_age_array age_array;
  -- 使用关键字 VALUES ... INTO 分别给变量 v_age_array 中 5 个整数类型的变量赋值。
  VALUES 20 INTO v_age_array(1);
  VALUES 21 INTO v_age_array(2);
  VALUES 22 INTO v_age_array(3);
  VALUES 23 INTO v_age_array(4);
  VALUES 24 INTO v_age_array(5);
END;
/
复制
数组变量的方法调用
ARRAY_FIRST

使用示例

!set plsqlUseSlash true
BEGIN
  -- 定义一个 ARRAY 类型 age_array,可存放 5 个整数类型的数据。
  DECLARE TYPE age_array AS INT ARRAY[5];
  -- 声明一个 age_array 类型的变量 v_age_array。
  DECLARE v_age_array age_array;
  -- 声明一个整数类型的变量 v_age。
  DECLARE v_age INT;
  -- 给变量 v_age_array 赋值,数组中的顺序依次为 18,19,20,21,22。
  SET v_age_array = ARRAY[18,19,20,21,22];
  -- 将变量 v_age_array 中的第一个元素的下标赋值给变量 v_age。
  SET v_age = v_age_array.ARRAY_FIRST;
  -- 打印出变量 v_age_array 中第一个元素的值。
  PUT_LINE('the first one:'||v_age_array(v_age));
END;
/
复制

输出结果

+-------------------+
|      output       |
+-------------------+
| the first one:18  |
+-------------------+
复制
ARRAY_LAST

使用示例

!set plsqlUseSlash true
BEGIN
  DECLARE TYPE age_array AS INT ARRAY[5];
  DECLARE v_age_array age_array;
  DECLARE v_age INT;
  SET v_age_array = ARRAY[18,19,20,21,22];
  -- 将变量 v_age_array 中的最后一个元素的下标赋值给变量 v_age。
  SET v_age = v_age_array.ARRAY_LAST;
  PUT_LINE('the last one:'||v_age_array(v_age));
END;
/
复制

输出结果

+------------------+
|      output      |
+------------------+
| the last one:22  |
+------------------+
复制
ARRAY_NEXT

使用示例

!set plsqlUseSlash true
BEGIN
  DECLARE TYPE age_array AS INT ARRAY[5];
  DECLARE v_age_array age_array;
  DECLARE v_age INT;
  SET v_age_array = ARRAY[18,19,20,21,22];
  -- 将变量 v_age_array 中第三个元素的下一个元素的下标赋值给变量 v_age。
  SET v_age = ARRAY_NEXT(v_age_array,3);
  PUT_LINE('the next one:'||v_age_array(v_age));
END;
/
复制

输出结果

+------------------+
|      output      |
+------------------+
| the next one:21  |
+------------------+
复制
ARRAY_PRIOR

使用示例

!set plsqlUseSlash true
BEGIN
  DECLARE TYPE age_array AS INT ARRAY[5];
  DECLARE v_age_array age_array;
  DECLARE v_age INT;
  SET v_age_array = ARRAY[18,19,20,21,22];
  -- 将变量 v_age_array 中第三个元素的上一个元素的下标赋值给变量 v_age。
  SET v_age = ARRAY_PRIOR(v_age_array,3);
  PUT_LINE('the prior one:'||v_age_array(v_age));
END;
/
复制

输出结果

+-------------------+
|      output       |
+-------------------+
| the prior one:19  |
+-------------------+
复制
ARRAY_DELETE

使用示例

!set plsqlUseSlash true
BEGIN
  -- 声明一个 age_array 类型的变量 v_age。
  DECLARE TYPE age_array AS INT ARRAY[5];
  DECLARE v_age_array age_array;
  DECLARE v_age age_array;
  -- 声明一个整数类型的变量 v_sum。
  DECLARE v_sum INT;
  -- 删除变量 v_age_array 中的数据,并将剩下的元素赋值给变量 v_age。
  SET v_age_array = ARRAY[18,19,20,21,22];
  SET v_age = ARRAY_DELETE(v_age_array);
  -- 将变量 v_age_array 中的元素个数,赋值给变量 v_sum。
  SET v_sum = v_age.CARDINALITY;
  -- 打印出变量 v_age 的元素个数,由于变量 v_age_array 的数据已经删  除,所以此处会返回 0。
  PUT_LINE('变量v_age的个数:'||v_sum);
END;
/
复制

输出结果

+---------------+
|    output     |
+---------------+
| v_age:0  |
+---------------+
复制
CARDINALITY

使用示例

!set plsqlUseSlash true
BEGIN
  DECLARE TYPE age_array AS INT ARRAY[5];
  DECLARE v_age_array age_array;
  DECLARE v_age INT;
  SET v_age_array = ARRAY[18,19,20,21,22,23];
  SET v_age = v_age_array.CARDINALITY;
  PUT_LINE('数组个数:'||v_age);
END;
/
复制

输出结果

+---------+
| output  |
+---------+
| 6  |
+---------+
复制