全部產品
Search
文件中心

PolarDB:包中定義集合類型

更新時間:Jul 06, 2024

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