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;
 

對於兩個集合對象合併後,,只要其中之一沒有初始化,,就不能使用它的方法...

 

 

 

posted on 2012-03-19 15:14  Mayvar  阅读(837)  评论(0编辑  收藏  举报

导航