pl/sql記錄表(一)

wisdomone1發表於2011-09-23
------------------------------------------------------------------
 ----------------pl/sql記錄表-------------------------------------
 ------------------------------------------------------------------
 
 pl/sql記錄表可以處理多行多列,可以理解為表
 
 示例程式碼如下:
    declare
       --它的每個元素類似於一行,故元素型別為%ROWTYPE,而非前面的%TYPE
       --元素下標型別為BINARY_INTEGER
      type emp_table_type is table of emp%rowtype index by binary_integer;
      emp_table emp_table_type;
    begin
     select * into emp_table(1) from emp where empno=&no;--提取表的一行記錄到EMP_TABLE(1)
     dbms_output.put_line('EMPLOYEE:'||EMP_TABLE(1).ENAME);--顯示錶一行記錄某個具體成員,在此為ENAME
    end;
    /
        
        
        
  
  
   集合方法
            它是ORACLE所提供的用於操縱集合變數的內建函式或過程,其中EXISTS,COUNT,LIMIT,FIRST,NEXT,
             PRIOR是函式,而EXTEND,TRIM,和DELETE是過程;
            
            
            集合方法的呼叫語法如下:
               COLLECTION_NAME.METHOD_NAME [(PARAMETERS)]     
           
            注意:
                 集合方法只能在PL/SQL語句中使用,而不能在SQL語句中呼叫
                
                 集合方法EXTEND和TRIM只適用於NESTED TABLE和VARRAY,而不適用於索引表
                
           
            1.exists
                 此方法用於確認集合元素是否存在,如存在,返回TRUE,否則為FALSE;
                
                 使用此集合方法的示例如下:
                   declare
                     type ename_table_type is table of emp.ename%type;
                     ename_table ename_table_type;
                   begin
                     if ename_table.exists(1) then
                         ename_table(1):='scott';      
                     else
                        dbms_output.put_line('必須初始化集合元素');   
                     end if;
                   end;/
                  
                  
            2,count
                 此方法用於返回當前集合變數中的元素總個數.如果集合元素存在數值,則統計結果
                   會包含此元素,如果集合元素為NULL,則統計結果不會包含此元素;
                
                 使用此方法的示例如下:
                    DECLARE
                          TYPE ENAME_TABLE_TYPE IS TABLE OF EMP.ENAME%TYPE INDEX BY BINARY_INTEGER;
                          ENAME_TABLE ENAME_TABLE_TYPE;
                       BEGIN
                         ENAME_TABLE(-5):='SCOTT';      
                         ENAME_TABLE(1):='AX';
                         DBMS_OUTPUT.PUT_LINE('COLLECTION TOTAL NUMBER:'||ENAME_TABLE.COUNT);
                       END;
                       /
           
           
            3,limit
                 此方法用於返回集合元素的最大個數,因為NESTED TABLE和索引表的元素個數沒有限制,所
                  以呼叫此方法返回NULL,但對於VARRAY而言,此方法返回VARRAY所允許的最大元素個數
                
                 示例如下:
                    DECLARE
                          TYPE ENAME_TABLE_TYPE IS VARRAY(20) OF EMP.ENAME%TYPE;
                          ENAME_TABLE ENAME_TABLE_TYPE:=ENAME_TABLE_TYPE('MARY');            
                          BEGIN
                            DBMS_OUTPUT.PUT_LINE('COLLECTION ELEMENT MAX NUMBER:'||ENAME_TABLE.LIMIT);
                          END;
                         
                         
            4,FIRST和LAST
                 FIRST方法返回集合變數第一個元素的下標,而LAST返回集合變數最後一個元素的下標
                
                 示例如下:
                    DECLARE
                         TYPE ENAME_TABLE_TYPE IS TABLE OF EMP.ENAME%TYPE INDEX BY BINARY_INTEGER;
                         ENAME_TABLE ENAME_TABLE_TYPE;
                       BEGIN               
                          ENAME_TABLE(-5):='SCOTT';
                          ENAME_TABLE(-2):='SMITH';
                          ENAME_TABLE(2):='MARY';
                          ENAME_TABLE(6):='BLAKE';
                          DBMS_OUTPUT.PUT_LINE('FIRST ELEMENT:'||ENAME_TABLE.FIRST);
                          DBMS_OUTPUT.PUT_LINE('LAST ELEMENT'||ENAME_TABLE.FIRST);
                       END;
                       /
                       以上程式碼返回的結果為:
                       first element:-5
                       last element:6
                      
                      
            5,prior和next
                 prior方法返回當前集合元素的前一個元素的下標,而NEXT方法返回當前集合元素的後一個元素的下標
                
                 示例如下:
                   declare
                     type ename_table_type is table of emp.ename%type index by binary_integer;
                     ename_table ename_table_type;
                   begin
                     ename_table(-5):='a';
                     ename_table(1):='b';
                     ename_table(3):='mary';
                     dbms_output.put_line('元素5的前一個元素:'||ename_table.prior(1));--返回是集合元素的下標,而非元素
                    
                   end;dbms_output.put_line('元素5的下一個元素:'||ename_table.next(1));
                   /
                       

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-708215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章