複合資料型別--此處偶做了index_by表的試驗#zhuan#
複合資料型別
--------------------------------------------------
-----此處偶做了index_by表的試驗:
測試1
declare
type t_product_id is table of number index by binary_integer;
type t_serial_no is table of varchar(300) index by binary_integer;
type t_buy_date is table of date index by binary_integer;
gzff_id t_product_id;
dw_name t_serial_no;
year_month t_buy_date;
----------------------------
cursor cur_sfc_tbl_product_reg is
select a.GZFF_ID GZFF_ID, a.DW_NAME DW_NAME, a.YEAR_MONTH YEAR_MONTH
from RM.HRM_COMP_GZFF a;
i number default 1;
begin
for onrecord in cur_sfc_tbl_product_reg loop
GZFF_ID(i) := onrecord.GZFF_ID;
DW_NAME(i) := onrecord.DW_NAME;
YEAR_MONTH(i) := onrecord.YEAR_MONTH;
dbms_output.put_line(to_char(GZFF_ID(i)) || DW_NAME(i) ||
to_char(YEAR_MONTH(i)));
i := i + 1;
end loop;
end;
--------------------------------------------------
測試2
declare
type ltype_id is table of number(38) index by binary_integer;
ll_id ltype_id;
cursor cur_qcs_cor_ntf_new is
select * from qm.qcs_cor_ntf_new ;
i number :=1;
begin
for on_record in cur_qcs_cor_ntf_new
loop
ll_id(i) := on_record.id;
dbms_output.put_line('第'||i||' 個,值為: '||ll_id(i));
i:=i+1;
end loop;
end ;
------------------------------------------------------
--上面為自己做的例子,下面為參考說明
------------------------------------------------------
集合的型別
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 [VARRAY|VARYING 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很適合於小型集合。
-------------------------------------------------------------------------
關於集合之間的比較
集合不能直接用於比較,要比較兩個集合,可以設計一個函式,該函式返回一個標量資料型別。
IF stock_list1>stock_list2 ----非法
IF sort_collection(stock_list1)>sort_collection(stock_list2) THEN --合法
但可以比較在集合內的兩個元素。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219982/viewspace-573306/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle-複合資料型別Oracle資料型別
- PL/SQL複合資料型別SQL資料型別
- 複合資料型別和遊標資料型別
- 淺談oracle複合資料型別Oracle資料型別
- PLSQL學習-【4複合資料型別】SQL資料型別
- 淺談oracle複合資料型別 (1)Oracle資料型別
- 淺談oracle複合資料型別 (2)Oracle資料型別
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- 全面探討PL/SQL的複合資料型別(轉)SQL資料型別
- 檢視錶中複合資料型別內容資料型別
- 組合資料型別資料型別
- 複合型別(json)型別JSON
- hive複雜資料型別的用法Hive資料型別
- Scala結構型別與複合型別解析型別
- 選擇合適的資料型別資料型別
- 全網最適合入門的物件導向程式設計教程:42 Python常用複合資料型別-collections容器資料型別物件程式設計Python資料型別
- 【Python】組合資料型別Python資料型別
- Oracle LOB資料型別的處理Oracle資料型別
- 什麼是組合資料型別?Python組合資料型別分為幾類?資料型別Python
- 關於隱式資料型別轉換的一些試驗資料型別
- Java複雜資料型別用法 (轉)Java資料型別
- Java 資料型別和 MySql 資料型別對應一覽表JavaMySQL 資料型別
- size_t 資料型別的好處資料型別
- Java中基本型別Array與複合型別List的互相轉換Java型別
- python組合資料型別(集合)Python資料型別
- 用強資料型別保護你的表單資料-基於antd表單的型別約束資料型別
- CXF--處理複雜型別型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- Go 複合型別之字典型別介紹Go型別
- java處理資料庫date型別資料Java資料庫型別
- 第 10 節:複合型別 2: 切片型別
- 02. 複合型別(Composite Types)型別
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- 如何驗證Oracle資料庫中表的型別Oracle資料庫型別
- vue開發黑科技--利用引用型別的值處理複雜資料的編輯Vue型別
- ETLCloud支援的資料處理型別包括哪些?Cloud型別
- sqlite資料型別 datetime處理SQLite資料型別
- Python常用的組合資料型別彙總Python資料型別