混了一個禮拜... 該是回來面對這系列問題的時候了... 其實我也不是故意要跳過的=P。因為上禮拜的問題是: "What packages (if any) has Oracle provided for use by developers?" .... 這.. 就算我去讀了一些文件,還是認為自己無法具體的回答... 所以就放棄這題了.. (如果我在面試的時候被問到這個,大概也沒時間拖過一個星期XD)
[問題] 請描述PL/SQL tables該如何使用
Answer:
先講講揪竟PL/SQL table(又叫index-by tables)是什麼? 這是它在9iR2以前的稱呼,9iR2起稱為"associative arrays”。他是一種:
- collection型別
- 有index
- 可用BINARY INTEGER或VARCHAR2做索引(indexed/associated)
他跟另一個collection型別: PL/SQL nested tables很相似:
- 是一維陣列(one-dimensional arrays)
- 無(大小)限制(unbounded, 理論上...只要記憶體夠大)
- 同質性(homogeneous, 就是array裡的每個element要一樣型別的意思..)
先來看一下宣告語法,先定義一個型別,接著才宣告變數:
TYPE 型別名稱 IS TABLE OF 一已知存在型別 INDEX BY [BINART_INTEGER | VARCHAR2(5)];
變數名稱 型別名稱;
ex:
TYPE position_table IS TABLE OF VARCHAR2(30) INDEX BY VARCHAR2(10);
who_list position_table;
所以上面我們就定義了一個position_table(使用者定義)data type, 是以字串(string)作index, 然後宣告變數who_list是這個型別。該怎麼使用呢?
who_list('CEO') := ‘Fisher Liang’;
who_list('CDO') := ‘Aileen Wu';
DBMS_OUTPUT.PUT_LINE('The CEO is ' || who_list('CEO'));
這樣~ 'CEO', 'CDO'就是index,而且是unique的,若是重複指定,就是取代舊有值的意思。雖然是個array,用起來卻很像是有index的table對巴~?
PL/SQL Tables/associative arrays只做暫時存放資料用,也不是一個真正的table,並無法對其使用insert或select into等SQL statement。不過可以做到session level的life cycle, 就是把以上宣告及使用放在package裡。
完畢!
Ref: