Oracle 自定义数组类型

来源:互联网 发布:淘宝刷客怎么申请退款 编辑:程序博客网 时间:2024/05/16 08:56
Pl/sql代码 复制代码 收藏代码
  1. --固定数组   
  2. declare   
  3.   type type_array is varray(10) of varchar2(20);   
  4.   var_array type_array:=type_array('ggs','jjh','wsb','csl','dd','bb');   
  5. begin   
  6.   for i in 1..var_array.count loop   
  7.       dbms_output.put_line(var_array(i));   
  8.   end loop;   
  9. end;   
  10.   
  11. --可变数组   
  12. declare    
  13.   type type_array is table of varchar2(20) index by binary_integer;   
  14.   var_array type_array;   
  15. begin    
  16.   var_array(1):='aa';   
  17.   var_array(2):='bb';   
  18.      
  19.   for i in 1..var_array.count loop   
  20.      dbms_output.put_line( var_array(i));   
  21.   end loop;   
  22.      
  23. end;   
  24.   
  25. --可变数组取表   
  26. declare   
  27. begin   
  28.      
  29. end;   
  30.   
  31. create or replace procedure proc_stock(n number)   
  32. as        
  33.        var_stock_code varchar2(10);   
  34.        var_stock_price number;   
  35. begin   
  36.        for i in 1..n loop   
  37.            var_stock_code:= lpad(STR1 =>i ,LEN =>6 ,PAD =>'0' ) ;   
  38.               
  39.            var_stock_price:=trunc(dbms_random.value*100)+1;   
  40.            --dbms_output.put_line(var_stock_code);   
  41.            --dbms_output.put_line(var_stock_price);   
  42.            insert into t_stock (stockcode,stockprice)    
  43.                   values(var_stock_code,var_stock_price);   
  44.            commit;          
  45.        end loop;   
  46. end;   
  47. declare   
  48. begin   
  49.        proc_stock(1000000);   
  50. end;   
  51. --用游标访问 14.578秒 13.5 13.8  
  52. declare   
  53.        cursor cur is select * from t_stock;   
  54.        row_stock t_stock%rowtype;   
  55. begin   
  56.        open cur;   
  57.        loop    
  58.             fetch cur into row_stock;   
  59.             exit when cur%notfound;   
  60.             null;   
  61.        end loop;   
  62.        close cur;   
  63. end;   
  64.   
  65. --用数组实现 4.813 1.953 2  
  66. declare   
  67.        type type_array is table of t_stock%rowtype index by binary_integer;   
  68.        var_array type_array;   
  69. begin   
  70.        select * bulk collect into var_array from t_stock;   
  71.        for i in 1..var_array.count loop             
  72.            null;   
  73.        end loop;   
  74. end;   
  75.   
  76. --访问自定义表   
  77. declare   
  78.        type type_record is record(   
  79.             username varchar2(20),   
  80.             sex varchar2(2)   
  81.        );   
  82.        type_record_user  type_record;   
  83.        type type_array is table of type_record_user%type index by binary_integer;   
  84.        var_array type_array;          
  85. begin   
  86.        select username,sex bulk collect into var_array from tuser;   
  87.        for i in 1..var_array.count loop   
  88.            dbms_output.put_line(var_array(i).username);   
  89.            dbms_output.put_line(var_array(i).sex);   
  90.        end loop;   
  91. end;  

==================================================================================================
                                      先定义数据类型,在创建存储过程                    =================================================================================================

CREATE OR REPLACE TYPE ARR_OBJECT AS OBJECT(

       TRADENO VARCHAR2(32),

       DEAL_TYPE VARCHAR2(2),

       TURNOVER VARCHAR2(20)

);

 

CREATE OR REPLACE TYPE WEALTH_DEAL_DETAIL_ARRAY IS TABLE OF ARR_OBJECT;

 

 PROCEDURE pro_wealth_deal_detail_array(P_FUND_ACCNO IN VARCHAR2,

                                                            P_OPEN_DEALNO IN VARCHAR2,

                                                            P_HOLD_ACCNO IN VARCHAR2,

                                                            P_MARKET_NO IN VARCHAR2,

                                                            P_SECURNO IN VARCHAR2,

                                                            P_TRADE_DATE IN DATE,

                                                            P_ARR OUT WEALTH_DEAL_DETAIL_ARRAY)

IS

     CURSOR CUR_WEALTH_DEAL_DETAIL IS

     SELECT TRADENO,DEAL_TYPE,TURNOVER FROM WEALTH_DEAL_DETAIL T

     WHERE T.FUND_ACCNO LIKE  P_FUND_ACCNO

         AND  T.OPEN_DEALNO LIKE P_OPEN_DEALNO

         AND T.HOLD_ACCNO LIKE P_HOLD_ACCNO

         AND T.MARKETNO LIKE P_MARKET_NO

         AND T.SECURNO LIKE P_SECURNO

         AND T.TRADE_DATE <= TRUNC(P_TRADE_DATE) + 1

         AND T.TRADE_DATE >= TRUNC(P_TRADE_DATE)

         ORDER BY TRADENO ASC;   

      

     V_WEALTH_DEAL_DETAIL        CUR_WEALTH_DEAL_DETAIL%ROWTYPE;     

     V_IDX INT := 0;                                                         

BEGIN

      P_ARR := WEALTH_DEAL_DETAIL_ARRAY();

      OPEN CUR_WEALTH_DEAL_DETAIL;

      LOOP

        FETCH CUR_WEALTH_DEAL_DETAIL INTO V_WEALTH_DEAL_DETAIL;

        EXIT WHEN CUR_WEALTH_DEAL_DETAIL%NOTFOUND;

        P_ARR.EXTEND;

        P_ARR(V_IDX) := ARR_OBJECT(V_WEALTH_DEAL_DETAIL.TRADENO,V_WEALTH_DEAL_DETAIL.DEAL_TYPE,V_WEALTH_DEAL_DETAIL.TURNOVER);

        V_IDX := V_IDX + 1;

      END LOOP;

      CLOSE CUR_WEALTH_DEAL_DETAIL;

END pro_wealth_deal_detail_array;

首先,我自定义了一个Object ARR_OBJECT.然后定义了一个类型WEALTH_DEAL_DETAIL_ARRAY,指明是ARR_OBJECT类型。这样就相当于Java中的List<Object>。在存储过程中使用WEALTH_DEAL_DETAIL_ARRAY作为OUT类型参数,根据传入的5个IN类型参数从WEALTH_DEAL_DETAIL表查询符合条件的数据,并放入WEALTH_DEAL_DETAIL_ARRAY中。


 

原创粉丝点击