Oracle學習(十三) 集合

來源:互聯網
上載者:User

PL/SQL語言的集合類似於數組,是管理多行資料必須的結構體。集合就是列表,可能有序,也可能無序。PL/SQL的集合類型有:聯合數組、巢狀表格和可變數組三種。

1、聯合數組

聯合數組類似於C語言中的數組。

(1)文法格式如下:

type typeName  is table of arrayType index by binary_integer;

其中,typeName表示新類型的類型名,arrowType表示要定義的聯合數組的類型。

假設有一個表t_module(name varchar(20)),那麼我們可以針對其name欄位建立如下聯合數組:

type moduleName is table of t_module.name%type index by binary_integer;  

(2)元素賦值

範例程式碼如下:

declare    type NameArray      is table of varchar(20) index by binary_integer; /*定義聯合數組NameArrow*/      na NameArray; /*聲明聯合數組NameArrow的一個變數*/  begin    na(1) := 'Hello'; /*給聯合數組賦值*/      na(2) := 'World'; /*給聯合數組賦值*/      na(5) := 'Oracle'; /*給聯合數組賦值*/      dbms_output.put_line(na(1) || na(2));  end;

注意:

a.聯合數組中的元素不是按特定順序排列的,元素的下標也是可以無序的,所以nameArrow(-100) := 'Hello'也是可以的。

b.index的資料類型是binary_integer類型,所以index的範圍為-214483647~+214483647。

c.當調用不存在的元素時將會出錯。

2、巢狀表格

巢狀表格的聲明和聯合數組的聲明十分類似。文法格式如下:

type typeName is table of arrayType [not null]  

巢狀表格的聲明與聯合數組的唯一不同是沒有index by binary_integer子句。

(1)巢狀表格的初始化

巢狀表格的初始化和聯合數組的初始化是不同的。在聲明了聯合數組之後,再聲明一個聯合數組對應的變數,如果此時沒有給該變數賦值,那麼該變數對應的聯合數組就是一個空的,在以後的語句中還可以給該聯合數組添加元素;而如果在聲明了巢狀表格變數時沒有初始化,則該巢狀表格將自動初始化為null,並且是唯讀。如果在後續代碼中繼續向該巢狀表格中添加元素,就會報錯,但是可以修改已經存在的元素的值。

以下是一個巢狀表格的初始化樣本:

declare    type NameArray is table of varchar(20);      na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu'); /*在聲明的時候即初始化該巢狀表格*/      begin        for nameIndex in 1..3 loop              dbms_output.put_line(na(nameIndex));          end loop;      end;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.