国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle復合數據類型(3)

2024-08-29 13:36:00
字體:
來源:轉載
供稿:網友

  PL/SQL集合
  
  集合與其他語言中的數組相似,在Oracle7.3及以前的版本中只有一種集合稱為PL/SQL表,這種類型的集合依然保留,就是索引(INDEX_BY)表,與記錄相似,集合在定義的時候必須使用TYPE語句,然后才是創建和使用這種類型的變量。
  
  集合的類型
  
  PL/SQL有三種類型的集合
  
  . Index_by表
  
  . 嵌套表
  
  . VARRAY
  
  這三種類型的集合之間由許多差異,包括數據綁定、稀疏性(sparsity)、數據庫中的存儲能力都不相同。綁定涉及到集合中元素數量的限制,VARRAY集合中的元素的數量是有限,Index_by和嵌套表則是沒有限制的。稀疏性描述了集合的下標是否有間隔,Index_by表總是稀疏的,假如元素被刪除了嵌套表可以是稀疏的,但VARRAY類型的集合則是緊密的,它的下標之間沒有間隔。
  
  Index_by表不能存儲在數據庫中,但嵌套表和VARRAY可以被存儲在數據庫中。
  
  雖然這三種類型的集合有很多不同之處,但他們也由很多相似的地方:
  
  . 都是一維的類似數組的結構
  
  . 都有內建的方法
  
  . 訪問由點分隔
  
  Index_by表
  
  Index_by表集合的定義語法如下:
  
  TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX
  BY BINARY_INTERGET;
  
  這里面重要的要害字是INDEX BY BINARY_INTERGET,沒有這個要害字,那么集合將是一個嵌套表,element_type可以是任何合法的PL/SQL數據類型,包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。其他的集合類型對數據庫的數據類型都有限制,但Index_by表不能存儲在數據庫中,所以沒有這些限制。
  
  一旦定義了index_by表,就可以向創建其他變量那樣創建index_by表的變量:
  
  DECLARE
  TYPE symbol_tab_typ IS TABLE OF VARCHAR2(5) INDEX BY BINARY_INTEGER;
  symbol_tab symbol_tab_typ;
  BEGIN
  
  嵌套表
  
  嵌套表非常類似于Index_by表,創建的語法也非常相似。使用TYPE語句,只是沒有INDEX BY BINARY_INTEGER子串。
  
  TYPE type_name IS TABLE OF element_type [NOT NULL]
  
  NOT NULL選項要求集合所有的元素都要有值,element_type可以是一個記錄,但是這個記錄只能使用標量數據類型字段以及只用于數據庫的數據類型(不能是PLS_INTEGER,BOOLEAN或SIGNTYPE)。
  
  嵌套表和VARRAY都能作為列存儲在數據庫表中,所以集合自身而不是單個的元素可以為NULL,ORACLE稱這種整個集合為NULL的為"自動設置為NULL(atomically NULL)"以區別元素為NULL的情況。當集合為NULL時,即使不會產生異常,用戶也不能引用集合中的元素。用戶可以使用IS NULL操作符檢測集合是否為NULL。
  
  存儲在一個數據庫中的嵌套表并不與表中的其它數據存放在同一個數據塊中,它們實際上被存放在第二個表中。正如沒有order by子句select語句不能保證返回任何有順序的數據,從數據庫中取回的嵌套表也不保證元素的順序。由于集合數據是離線存儲的,對于大型集合嵌套表是一個不錯的選擇。
  
  VARRAY
  
  VARRAY或數據變量都有元素的限制。想起他集合一樣VARRAY定義仍然使用TYPE語句,但要害字VARRAY或VARRYING ARRAY告訴ORACLE這是一個VARRAY集合。
  
  TYPE type_name IS [VARRAYVARYING ARRAY] (max_size) OF
  element_type [NOT NULL]
  
  max_size是一個整數,用于標示VARRAY集合擁有的最多元素數目。VARRAY集合的元素數量可以低于max_size,但不能超過max_size。element_type是一維元素的數據類型,假如element_type是記錄,那么這個記錄只能使用標量數據字段(與嵌套標相似)。NOT NULL子串表示集合中的每一個元素都必須有值。
  
  與嵌套表相似,VARRAY能夠自動為NULL,可以使用IS NULL操作符進行檢測。與嵌套表不同的是,當VARRAY存儲在數據庫中時與表中的其他數據存放在同一個數據塊中。正象列的排序保存在表的SELECT*中一樣元素的順序保存在VARRAY中。同樣由于集合是在線存儲的,VARRAY很適合于小型集合。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安吉县| 内丘县| 泰来县| 霸州市| 柯坪县| 河南省| 康乐县| 剑川县| 乌审旗| 新津县| 城固县| 台湾省| 余干县| 盐城市| 宝坻区| 宜川县| 龙岩市| 辉县市| 元氏县| 睢宁县| 米易县| 大姚县| 龙井市| 昌吉市| 监利县| 景泰县| 克什克腾旗| 团风县| 平武县| 呼玛县| 南京市| 南漳县| 宁陕县| 新建县| 沧源| 孟州市| 永平县| 南木林县| 南涧| 嘉黎县| 四会市|