数据库

本类阅读TOP10

·SQL语句导入导出大全
·Power Designer杂记
·SQL Server日期计算
·常用的oracle函数使用说明(一)
·sqlserver2000数据库置疑的解决方法
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·SQL to Excel 的应用
·SQL语句导入导出大全
·Error:ORA-01033:ORACLE initialization or shutdown in progress错误解决
·Oracle中password file的作用及说明

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Oracle索引表的使用(Table Index)

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

create or replace procedure proc_XXX(
        p_iBillMonth    in  number,
        p_tab           in  number,       
        p_nStatus       out number,
        p_szErrorMsg    out varchar2
)
is
        type t_cur is ref cursor;
        v_ser           t_cur;
       v_iAccId        number(11);
       v_iSubId        number(10);
       v_strDetail     varchar2(4000);
        v_noDetail      varchar2(4000);
        v_NewDetail     varchar2(4000);           
       v_strSql        varchar2(4000); 
        v_BeginDate     varchar2(14);
        v_EndDate       varchar2(14);
        v_RowId         rowid;
        v_iLen          number(2);
        v_AccCode       varchar2(7);
        v_strFee        varchar2(9);
        v_strCount      varchar2(7);
        v_strUnit       varchar2(12);
        v_NoWnerCode    number;
        v_SumId         number;
        v_iTemp         number;
        TYPE detail_param IS RECORD
        (
          acc_code         number(7),
          fee              number(9),
          time             number(1),
          cout             number(7),
          unit             number(12)
        );
        TYPE detail_param_list IS TABLE OF detail_param INDEX BY BINARY_INTEGER;
        v_noowner_detail_param_list detail_param_list;
        v_owner_detail_param_list   detail_param_list;
begin
        v_strSql:=' select acc_id,sub_id,to_char(begin_date,''yyyymmddhh24miss''),'
             ||' to_char(end_date,''yyyymmddhh24miss''),detail_data,rowid from sum_noowner_'||p_iBillMonth
                ||' where mod(acc_id,10)='||p_tab;
        open v_ser for v_strSql;
        loop
         <<nextsub>>
         fetch v_ser into v_iAccId,v_iSubId,v_BeginDate,v_EndDate,v_noDetail,v_RowId;
         exit when v_ser%notfound;  
       
     for i in 0..length(v_noDetail)/36-1 loop
          v_noowner_detail_param_list(i+1).acc_code:=substr(v_noDetail,i*36+1,7);
            v_noowner_detail_param_list(i+1).fee:=substr(v_noDetail,i*36+8,9);
            v_noowner_detail_param_list(i+1).time:=substr(v_noDetail,i*36+17,1);
            v_noowner_detail_param_list(i+1).cout:=substr(v_noDetail,i*36+18,7); 
            v_noowner_detail_param_list(i+1).unit:=substr(v_noDetail,i*36+25,12);         
     end loop;
    
     for i in 0..length(v_strDetail)/36-1 loop
          v_owner_detail_param_list(i+1).acc_code:=substr(v_strDetail,i*36+1,7);
            v_owner_detail_param_list(i+1).fee:=substr(v_strDetail,i*36+8,9);
            v_owner_detail_param_list(i+1).time:=substr(v_strDetail,i*36+17,1);
            v_owner_detail_param_list(i+1).cout:=substr(v_strDetail,i*36+18,7); 
            v_owner_detail_param_list(i+1).unit:=substr(v_strDetail,i*36+25,12);  
     end loop;                 
          
         for i in v_owner_detail_param_list.first..v_owner_detail_param_list.last loop
               if v_owner_detail_param_list.EXISTS(i) THEN
                 if v_noowner_detail_param_list.COUNT>0 then
                  for j in v_noowner_detail_param_list.first..v_noowner_detail_param_list.last loop   
                      if v_noowner_detail_param_list.EXISTS(j) THEN
                         if v_noowner_detail_param_list(j).acc_code=v_owner_detail_param_list(i).acc_code then
                            v_owner_detail_param_list(i).fee:=
                              v_owner_detail_param_list(i).fee+v_noowner_detail_param_list(j).fee;
                            v_owner_detail_param_list(i).time:=
                              v_owner_detail_param_list(i).time+v_noowner_detail_param_list(j).time;
                            v_owner_detail_param_list(i).cout:=
                              v_owner_detail_param_list(i).cout+v_noowner_detail_param_list(j).cout;
                            v_owner_detail_param_list(i).unit:=
                              v_owner_detail_param_list(i).unit+v_noowner_detail_param_list(j).unit;                  
                            v_noowner_detail_param_list.delete(j);
                         end if;   
                      end if;
                   end loop;
                 end if;
               end if;
         end loop;
       
         if v_noowner_detail_param_list.COUNT>0 then
              for k in v_noowner_detail_param_list.first..v_noowner_detail_param_list.last loop               
                  if v_noowner_detail_param_list.EXISTS(k) THEN
                     v_owner_detail_param_list(v_owner_detail_param_list.COUNT + 1).acc_code:=
                       v_noowner_detail_param_list(k).acc_code;
                     v_owner_detail_param_list(v_owner_detail_param_list.COUNT + 1).fee:=
                       v_noowner_detail_param_list(k).fee;
                     v_owner_detail_param_list(v_owner_detail_param_list.COUNT + 1).time:=
                       v_noowner_detail_param_list(k).time;
                     v_owner_detail_param_list(v_owner_detail_param_list.COUNT + 1).cout:=
                       v_noowner_detail_param_list(k).cout;
                     v_owner_detail_param_list(v_owner_detail_param_list.COUNT + 1).unit:=
                       v_noowner_detail_param_list(k).unit;
                  end if;
              end loop;
         end if;
           
         for i in v_owner_detail_param_list.first..v_owner_detail_param_list.last loop                   
             if v_owner_detail_param_list.EXISTS(i) THEN
               v_AccCode:=v_owner_detail_param_list(i).acc_code;
            v_iLen:=length(v_AccCode);   
            while 7-v_iLen>0 loop
             v_AccCode:=' '||v_AccCode;
             v_iLen:=length(v_AccCode);
            end loop;
                      
               v_strFee:=v_owner_detail_param_list(i).fee;
            v_iLen:=length(v_strFee);   
            while 9-v_iLen>0 loop
             v_strFee:=' '||v_strFee ;
             v_iLen:=length(v_strFee);
            end loop;
   
               v_strCount:=v_owner_detail_param_list(i).cout;
            v_iLen:=length(v_strCount);
            while 7-v_iLen>0 loop 
             v_strCount:=' '||v_strCount ;
             v_iLen:=length(v_strCount);
            end loop;
                 
            v_strUnit:=v_owner_detail_param_list(i).unit;
            v_iLen:=length(v_strUnit);
            while 12-v_iLen>0 loop
             v_strUnit:=' '||v_strUnit ;
             v_iLen:=length(v_strUnit);
            end loop;                 
               v_NewDetail:=v_NewDetail||v_AccCode||v_strFee
                          ||v_owner_detail_param_list(i).time||v_strCount||v_strUnit;                 
             end if;
         end loop;   
         v_owner_detail_param_list.delete; 
        
         v_NewDetail:='';
        end loop;
        close v_ser;
 
        p_nStatus:=0;
       p_szErrorMsg:='Succeed to finish proc_no2ower.';
       return;
exception
 when others then
  p_nStatus:=-1;
    p_szErrormsg:='encounter a exception,sqlcode:'||sqlcode
                ||',sqlerrm:'||sqlerrm||'v_sql:'||v_strSql;
  return;
end proc_XXX;




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有