PL/SQL 問題澄清(1)
看下面一段程序,您能都答對麼?
DECLARE
my_list DBMS_SQL.number_table;
element_exists BOOLEAN;
BEGIN
DBMS_OUTPUT.put_line(CASE WHEN my_list.EXISTS (null) THEN 'T' ELSE 'F' END);
DBMS_OUTPUT.put_line(CASE WHEN my_list.count > 0 THEN 'T' ELSE 'F' END);
my_list(-1) := -100;
my_list(1) := 100;
my_list(2) := 200;
/*my_list.delete(0)*/
DBMS_OUTPUT.put_line(CASE WHEN my_list.EXISTS (0) THEN 'T' ELSE 'F' END);
DBMS_OUTPUT.put_line(to_char(my_list(1)));
DBMS_OUTPUT.put_line(to_char(my_list(2)));
END;
如果 賦值後,,my_list.delete(0),,再做以上輸出呢?or 會有 exception?//F, F,F,100,200 ;
如果 ,,my_list.delete(1),,再做以上輸出呢?or 會有 exception?//exception:DBMS_OUTPUT.put_line(to_char(my_list(1)));
能否:my_list := DBMS_SQL.number_table()??//不可以
結果如下:
F, F,F,100,200 ;;
但是對象型的可以創建集合對象:
create type PLC_INTERVAL as object(
a VARCHAR2(7),
b VARCHAR2(10),
c VARCHAR2(1),
d DATE
)
type PLC_INTERVAL_TABLE is table of PLC_INTERVAL;
declare
MYTYPE PLC_INTERVAL_TABLE;
begin
MYTYPE := PLC_INTERVAL_TABLE();
DBMS_OUTPUT.put_line(to_char(MYTYPE.count));
end;
//輸出: 0;
//如果沒有MYTYPE := PLC_INTERVAL_TABLE();則會產生EXCEPTION
DECLARE
TYPE plch_numbers_ntt IS TABLE OF NUMBER;
lnt_1 plch_numbers_ntt;
lnt_2 plch_numbers_ntt;
BEGIN
lnt_1 := plch_numbers_ntt (); //1
lnt_2 := plch_numbers_ntt(1,2,3); //2
lnt_1 := lnt_1 MULTISET UNION lnt_2;
如果沒有1 or 2的任一行都會報錯
DBMS_OUTPUT.put_line(TO_CHAR(lnt_1.COUNT));
END;
對於兩個集合對象合併後,,只要其中之一沒有初始化,,就不能使用它的方法...