您可以在包(package)中定义变长数组、嵌套表以及关联数组三种集合类型。
注意事项
与局部的集合类型不同的是,该类型会随着包的定义被持久化在系统表中,在包删除时被级联删除。
示例
以下是一个包集合类型和局部集合类型转换的示例。
CREATE OR REPLACE PACKAGE pkg AS
TYPE NumberList IS TABLE OF NUMBER;
PROCEDURE print (nums NumberList);
END pkg;
CREATE OR REPLACE PACKAGE BODY pkg AS
PROCEDURE print (nums NumberList) IS
BEGIN
FOR i IN nums.FIRST..nums.LAST LOOP
RAISE NOTICE '%', nums(i);
END LOOP;
END;
END;
DECLARE
TYPE CharList IS TABLE OF VARCHAR(10);
n1 pkg.NumberList := pkg.NumberList(1,2); -- 使用包的集合类型
n2 CharList := CharList('3','4'); -- 使用局部集合类型
BEGIN
pkg.print(n1); -- 传入包的集合类型的变量
pkg.print(n2); -- 传入局部变量, 但会根据元素类型进行类型转换
END;
结果显示如下:
NOTICE: 1
NOTICE: 2
NOTICE: 3
NOTICE: 4
DO
以下是一个包集合类型和全局集合类型转换的示例。
-- 声明全局集合类型
CREATE OR REPLACE TYPE NumList IS TABLE OF NUMBER;
-- 使用上一个示例的包过程
DECLARE
n NumList := NumList(5,6);
BEGIN
pkg.print(n);
END;
结果显示如下:
NOTICE: 5
NOTICE: 6
DO
文档内容是否对您有帮助?