Oracle三種集合資料型別的比較
集合在使用時必須先使用type進行定義方可使用
1.index_by表
type type_name is table of element_type [NOT NULL] index by binary_integer
2.巢狀表
type type_name is table of element_type [NOT NULL]
3.varray
type type_name is [varray ¦varying array](max_size) of element_type[NOT NULL]
一,index_by表
TYPE TYPE1 IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
1.使用的時候需要先賦值後讀取,至少也要先初期化一下,否則會出現異常:ORA-01403: no data found。
2.這種陣列不需要事先指定上限,下標可以不連續,可以是0或負數。
例:v1 TYPE1;
v1(-1) := '-1';
v1(0) := '0';
v1(1) := '1';
DBMS_OUTPUT.put_line(v1(-1)); --訪問合法
DBMS_OUTPUT.put_line(v1(2)); --訪問非法
二,巢狀表
TYPE TYPE2 IS TABLE OF VARCHAR2(10);
1.必須進行初期化,否則會出現異常:ORA-06531: Reference to uninitialized collection
2.初期化方法:
v1 TYPE2 := TYPE2(); --宣告時初期化陣列為空
v2 TYPE2 := TYPE2('1','2','3','4','5'); --宣告時初期化陣列為5個元素
v1 := TYPE2(); --初期化後陣列為空
v2 := TYPE2('1','2','3','4','5'); --初期化後陣列為5個元素
3.陣列元素的訪問:
下標從1開始,不能超過陣列所有元素的總和,當下標超出允許範圍時,出現異常:ORA-06532: Subscript. outside of limit
因為不能訪問空陣列,所以空陣列的場合,必須進行陣列擴充套件。
例:v1.EXTEND;
V1(1):= ‘1’; --訪問合法
v1(2):= ‘2’; --訪問非法,之前必須再次執行v1.EXTEND;
例:v2的下標範圍是1~5。
v2(5):= ‘Hello’; --訪問合法
DBMS_OUTPUT.put_line(v2(6)); --訪問非法
三,Varray
TYPE TYPE3 IS ARRAY(5) OF VARCHAR2(10);
由於型別定義時的元素個數限制,所以TYPE3的變數在使用時最大的元素個數不能超過5個。
與巢狀表基本相同(略)
四,集合內建函式
集合還有很多內建函式,這些函式稱為方法,呼叫方法的語法如下:
collection.method
下表中列出oracle中集合的方法
方法 描述 使用限制
COUNT 返回集合中元素的個數
DELETE 刪除集合中所有元素
DELETE(x) 刪除元素下標為x的元素,如果x為null,則集合保持不變 對VARRAY非法
DELETE(x,y) 刪除元素下標從X到Y的元素,如果X>Y集合保持不變 對VARRAY非法
EXIST(x) 如果集合元素x已經初始化,則返回TRUE, 否則返回FALSE
EXTEND 在集合末尾新增一個元素 對Index_by非法
EXTEND(x) 在集合末尾新增x個元素 對Index_by非法
EXTEND(x,n) 在集合末尾新增元素n的x個副本 對Index_by非法
FIRST 返回集合中的第一個元素的下標號,對於VARRAY集合始終返回1。
LAST 返回集合中最後一個元素的下標號, 對於VARRAY返回值始終等於COUNT。
LIMIT 返回VARRY集合的最大的元素個數,對於巢狀表和Index_by集合無用。
NEXT(x) 返回在元素x之後及緊挨著它的元素的值,如果該元素是最後一個元素,則返回null。
PRIOR(x) 返回集合中在元素x之前緊挨著它的元素的值,如果該元素是第一個元素,則返回null。
TRIM 從集合末端開始刪除一個元素 對index_by不合法
TRIM(x) 從集合末端開始刪除x個元素 對index_by不合法
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219982/viewspace-573309/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle的 資料型別比較及注意事項Oracle資料型別
- ORACLE DATE和TIMESTAMP資料型別的比較(一) (轉)Oracle資料型別
- ORACLE DATE和TIMESTAMP資料型別的比較(二) (轉)Oracle資料型別
- Oracle date 型別比較和String比較Oracle型別
- 關於Oracle字元型別的比較Oracle字元型別
- 資料更改事件的三種型別事件型別
- XML Schema和XML DTD的資料型別比較XML資料型別
- mysql資料庫中decimal資料型別比較大小MySql資料庫Decimal資料型別
- Redis 三種特殊資料型別Redis資料型別
- Mysql pg oracle三種資料庫獲取月份、周的函式比較MySqlOracle資料庫函式
- oracle的三種型別的程式Oracle型別
- DataTable資料批量寫入資料庫三種方法比較資料庫
- Redis 中三種特殊的資料型別Redis資料型別
- 各種時間型別的轉換及比較型別
- 不同資料型別與零值比較的if從句資料型別
- MongoDB、Cassandra 和 HBase 三種 NoSQL 資料庫比較MongoDBSQL資料庫
- Hive中的集合資料型別Hive資料型別
- python的資料型別(集合)Python資料型別
- 比較集合
- php型別比較表PHP型別
- Java Integer型別比較Java型別
- PHP基礎-資料型別-string和int比較PHP資料型別
- 77種資料建模工具比較
- 幾種常用資料庫比較資料庫
- java double、float型別的比較Java型別
- C與I型別的比較型別
- Julia不同資料型別函式的內部程式碼比較資料型別函式
- 《卸甲筆記》-PostgreSQL和Oracle的資料型別的對比系列四:大資料型別筆記SQLOracle資料型別大資料
- Oracle基本資料型別儲存格式淺析(三)——日期型別(三)Oracle資料型別
- 資料中心代理的三種型別型別
- mysql字元型別varchar()比較MySql字元型別
- Redis 三種特殊資料型別之 BitmapsRedis資料型別
- C# 物件比較(值型別、引用型別)C#物件型別
- oracle資料庫兩表資料比較Oracle資料庫
- 比較兩個表的資料差別
- oracle 各資料型別dump說明(三)Oracle資料型別
- EJBQL中關於日期型資料的比較
- MySQL 一種比較經濟的資料庫MySql資料庫