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:返回数组中第一个元素的下标
-
ARRAY_LAST:返回数组中最后一个元素的下标
-
ARRAY_NEXT:返回数组下一个元素的下标
-
ARRAY_PRIOR:返回数组上一个元素的下标
-
ARRAY_DELETE:删除数组元素
-
CARDINALITY:返回数组中元素的个数
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 | +---------+
复制
文档反馈