您可以在包(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