首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

PL/SQL 集合類型:VARRAY (定長陣列) 宣告與操作範例

     編輯:關於SqlServer

VARRAY:有序、定長、可為 Null 的一維集合

PL/SQL 提供三種集合:Associative Array (索引表)、Nested Table (巢狀表)、VARRAY (可變長度陣列)。本文聚焦 VARRAY——唯一具備**最大長度限制**且**保持插入順序**的集合,適合「固定上限、順序敏感」場景(如電話號碼清單、標籤陣列)。

完整範例程式碼

DECLARE
  -- 1. 定義型別:最多 10 個元素,每元素 VARCHAR2(20)
  TYPE v_array IS VARRAY(10) OF VARCHAR2(20);
  -- 2. 宣告變數
  my_array v_array;
BEGIN
  -- 3. 建構函數初始化 (3 個元素)
  my_array := v_array('你', '我', '他');
  
  -- 4. 修改指定索引 (1-based)
  my_array(2) := '呵呵呵';
  
  -- 5. 輸出驗證
  DBMS_OUTPUT.PUT_LINE(my_array(2));  -- 輸出: 呵呵呵
  
  -- 6. 追加元素 (EXTEND)
  my_array.EXTEND;
  my_array(4) := '新增';
  
  -- 7. 遍歷
  FOR i IN 1..my_array.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(i || ':' || my_array(i));
  END LOOP;
END;
/
-- 輸出:
-- 呵呵呵
-- 1:你
-- 2:呵呵呵
-- 3:他
-- 4:新增

核心方法與屬性速查

方法/屬性說明範例
COUNT目前元素個數my_array.COUNT
LIMIT最大容量 (定義時指定)my_array.LIMIT → 10
EXTEND(n)增加 n 個 Null 元素 (預設 1)my_array.EXTEND(2)
TRIM(n)移除尾端 n 個元素 (預設 1)my_array.TRIM
DELETE(i)**VARRAY 不支援** (僅 Nested Table)—
EXISTS(i)索引 i 是否存在my_array.EXISTS(3)
FIRST/LAST第一/最後索引 (皆為 1/COUNT)my_array.FIRST
PRIOR/NEXT(i)前一/後一索引my_array.NEXT(2)

三大集合選型指南

特性Associative ArrayNested TableVARRAY
索引型別PLS_INTEGER / VARCHAR2正整數 (1-based)正整數 (1-based)
最大長度無上限無上限有上限 (LIMIT)
儲存於資料庫否 (僅 PL/SQL 記憶體)是 (可建立欄位)是 (可建立欄位)
順序保證無 (雜湊)無 (集合)有 (插入順序)
稀疏性支援支援 (DELETE 後)不支援 (緊湊)
適用場景快取、查找表資料庫欄位、大量資料固定上限清單、有序標籤

資料庫欄位使用 VARRAY

CREATE TYPE phone_varray AS VARRAY(5) OF VARCHAR2(20);
/
CREATE TABLE customer (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  phones phone_varray
);

INSERT INTO customer VALUES (1, '張三', phone_varray('0912-345678', '02-23456789'));
SELECT c.phones(1) FROM customer c WHERE id = 1;  -- 取第一支電話

總結

VARRAY = **有序、定長、不可稀疏** 的集合。記住:EXTEND 才能增長、TRIM 才能縮減、**無 DELETE**、索引從 1 起算。若需無上限或稀疏操作,改用 Nested Table;若需負索引/字串索引,用 Associative Array。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved