Oracle 11g Release 1 (11.1) PL/SQL_理解 Collection 類型

來源:互聯網
上載者:User

本文內容

  • 定義 Collection 類型
  • 聲明 Collection 變數
  • 初始化和引用 Collection
  • 引用 Collection 元素
  • 給 Collection 賦值 
  • 多維 Collection
  • 比較 Collection
  • Collection 方法
  • Collection 異常  

瞭解 Oracle 集合意義在於:當我們採用程式設計語言開發應用程式時,對其內建的集合類型,如數組、鏈表等,使用得很多,也很方便,但是當商務邏輯變得複雜時,如需要同時向多個表插入資料,和一個表插入多條資料,也許還需要事物控制,此時使用匿名子程式似乎很合適。那麼,在匿名子程式中使用集合類型就不可避免。

另外,若有一個用程式設計語言寫的函數,其涉及集合操作,出於某種必要的原因,想改寫成 Oracle 函數,那麼,對瞭解 Oracle 集合操作很有必要。 

定義 Collection 類型

先定義 collection 類型,之後再聲明該類型的變數。

你可以在模式層級、包或 PL/SQL 塊內定義一個 collection 類型。

在模式層級建立的 collection 類型是 standalone stored type。用 CREATE TYPE 語句建立。它儲存在資料庫,直到用 DROP TYPE 語句刪除該類型。

在包內建立的 collection 類型是 packaged type。它儲存在資料庫,直到用 DROP PACKAGE 語句刪除包。

在 PL/SQL 塊建立的 collection 類型只在塊內可用,只有塊嵌入在 standalone 或 packaged subprogram 中它才儲存在資料庫。

collection 類型遵循與其他類型、變數一樣的範圍和執行個體化規則。當你輸入一個塊或子程式時,collection 被執行個體化,當退出時,銷毀。在一個包中,當初從引用包時,collection 被執行個體化,並在結束資料庫會話時,銷毀。

 

你可以在任何 PL/SQL 塊、子程式,或包的聲明部分,使用 TYPE 來定義 TABLEVARRAY 類型。

對於在 PL/SQL 內聲明的 nested tablevarray,table 或 varray 的元素類型可以是,除了 REF CURSOR 以外的任意 PL/SQL 資料類型。

當定義一個 VARRAY 類型時,必須用一個正整數指定最大大小。如下所示,定義一個能最多儲存 366 個日期的 VARRAY

DECLARE
TYPE Calendar IS VARRAY(366) OF DATE;

associative arrays 可以用任意索引值插入元素。鍵不需要是連續的。鍵的資料類型可以是 PLS_INTEGERVARCHAR2,或 VARCHAR2 子類型的一個:VARCHARSTRING、或 LONG.

必須指定基於 VARCHAR2 鍵的長度,除了 LONG,因為,它等價於聲明一個 VARCHAR2(32760) 類型的鍵。類型 RAWLONG RAWROWIDCHARCHARACTER 不允許做為一個 associative array 的鍵。LONGLONG RAW 僅僅是為了向後相容。

不允許初始化子句。associative arrays 沒有構造標記。當使用基於 VARCHAR2 鍵來引用 associative arrays 中的一個元素時,你可以使用如 DATETIMESTAMP 等類型,只要該類型可以用 TO_CHAR 函數轉換成 VARCHAR2

聲明 Collection 變數

定義一個 collection 類型後,用該型別宣告變數。在聲明中使用新類型名,同預定義類型一樣,如 NUMBER

樣本 1:示範聲明 nested table、varray 和 associative array

DECLARE
  TYPE nested_type IS TABLE OF VARCHAR2(30);
  TYPE varray_type IS VARRAY(5) OF INTEGER;
  TYPE assoc_array_num_type IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
  TYPE assoc_array_str_type IS TABLE OF VARCHAR2(32) INDEX BY PLS_INTEGER;
  TYPE assoc_array_str_type2 IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(64);
  v1 nested_type;
  v2 varray_type;
  v3 assoc_array_num_type;
  v4 assoc_array_str_type;
  v5 assoc_array_str_type2;
 
BEGIN
  -- an arbitrary number of strings can be inserted v1
  v1 := nested_type('Shipping', 'Sales', 'Finance', 'Payroll');
  v2 := varray_type(1, 2, 3, 4, 5); -- Up to 5 integers
  v3(99) := 10; -- Just start assigning to elements
  v3(7) := 100; -- Subscripts can be any integer values
  v4(42) := 'Smith'; -- Just start assigning to elements
  v4(54) := 'Jones'; -- Subscripts can be any integer values
  v5('Canada') := 'North America';
  -- Just start assigning to elements
  v5('Greece') := 'Europe';
  -- Subscripts can be string values
END;
/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.