pl/sql记录表(一)

------------------------------------------------------------------
 ----------------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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-708215/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值