动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.DELPHI 调用 Oracle 存储过程并返.
.bin目录下各文件意义及使用方法.
.LVS的配置详解配置.
.网管要用Linux.
.Tomcat配置技巧Top 10 [ZT].
.Oracle XML Publisher与JDevelop.
.sqlPlus中的空值.
.安装Oracle后使用的修改表空间的.
.Oracle的两个重要文件:TNSNAMES.
.ORACLE碎片整理 (2).
.ORACLE常见错误代码分析解决.
.Oracle服务器常用命令行工具一览.
.关于游标的一点发现.
.ORACLE之常用FAQ V1.0二(构架体系.
.Oracle Enterprise Manager常见问.
.使用Oracle9i的新特征-停顿(QUIE.
.三大软件巨头抢食西部电子商务蛋.
.当“菜鸟”遭遇 Linux.
.Oracle 9i 用户的管理.
.Oracle 用 VPD 来保持信息的隐私.

一个通过Oracle8i存储过程,返回记录集的程序包(存储过程)

发表日期:2008-2-9 |



  
提示:在Oracle8i中,假如需要通过存储过程返回结果集, 需要使用游标!

CREATE OR REPLACE  PACKAGE BODY "SMS_PAY"."SMSMAINT"                                                                              
IS
 
 --功能描述:查询代理银行交易流水信息 writer: wang haibo 2004-08-24
 PROCEDURE GetAgtBankFlow(AreaCode in varchar2,KeyWord in varchar2,startTradeDate in varchar2,endTradeDate in varchar2,Re_CURSOR OUT T_CURSOR,ret out number)
   is
   
  IsExists number;
  
  strSQL VARCHAR2(2048);
  

 Begin

  --检查临时表是否已经存在,假如不存在,则创建,否则插入数据 start
 Select Count(*) Into IsExists from all_tables Where Table_Name='TEMPAGTBANKFLOW';
 
       
 IF IsExists=0 Then
 
    strSQL:='CREATE GLOBAL TEMPORARY TABLE  SMS_PAY.TEMPAgtBankFlow
      (AGTID VARCHAR2(13) ,BANK_GLIDE Number(12),TradeType VARCHAR2(20),Trade_Money Number(14,2),
      TRADEDATE VARCHAR2(10),TRADETIME VARCHAR2(8),BankNAME VARCHAR2(30),
      AreaCode Varchar2(30), AreaName VARCHAR2(30),State VARCHAR2(30),CheckFlag Number(1),
      StatusFlag Number(1),SUCcFlag Number(1)) on commit preserve rows';

     --把临时表的创建选项由on commit delete rows改为on commit preserve rows; 
     --否则在调用的时候,回出现ORA-08103: object no longer exists
    
     Execute Immediate strSQL;
    
  Else
    
     Execute immediate 'Truncate table Sms_pay.TEMPAGTBANKFLOW';
    
  End IF;
  --检查临时表是否已经存在,假如不存在,则创建,否则插入数据 end
   
  ---功能:把满足条件的一级代理商转帐信息导入数据库 Start
 
  /*strSQL:='Insert Into TEMPAgtBankFlow
           Select A.Agent_Mobile,A.Bank_Glide,
            Decode(A.OPTCode,''100'',''交款交易'',''101'',''交款冲正'',''900'',''抹帐交易'',''类型不明'') as TradeType,A.Trade_Money,
            TO_Char(To_Date(A.Trade_Date,''YYYYMMDD''),''YYYY-MM-DD'') as TradeDate,
            TO_Char(To_Date(A.Trade_Time,''hh24miss''),''hh24:mi:ss'') as TradeTime,B.BankName,C.AreaCode,C.AreaName,
            (Case When CheckFlag=-1 Then ''/Images/state_rollback.gif'' When SuccFlag=-1 Then ''/Images/state_cancel.gif'' When StatusFlag=-1 Then ''/Images/state_unnormal.gif'' Else ''/Images/state_normal.gif'' End) as State
           From Bank_Stream_Account A,BankInfoConfig B,AreaConfig C,FstAgtAccount D
            Where A.Bank_ID=B.BankCode And Trim(A.Agent_Mobile)=D.AgtID And C.CityCode=D.CityCode ';
                   
  IF AreaCode!
='0' Then   --条件1: 选择所有地区的信息    
     strSQL:=strSQL ' And Trim(C.AreaCode)=''' AreaCode ''' ';
  End IF;  
    
  IF TradeDate!=' ' Then  --条件2: 选择所有地区的信息,选择所有交易日期的信息

     strSQL:=strSQL ' And TO_Char(To_Date(A.Trade_Date,''YYYYMMDD''),''YYYY-MM-DD'')=''' TradeDate ''' ';       
          
  End If;
 
  IF KeyWord!=' ' Then  --条件3: 选择所有地区的信息,选择所有交易日期的信息,选择和查询要害字匹配的信息
    
     strSQL:=strSQL '  And (D.AgtID Like''%' KeyWord '%'' Or TO_Char(A.BANK_GLIDE) Like ''%' KeyWord '%'' Or B.BankName Like ''%' KeyWord '%'') ';
 
  End If; 
 
  Execute Immediate strSQL;    
 
  ---功能:把满足条件的一级代理商转帐信息导入数据库 End
  */
 
  ---功能:把满足条件的二级代理商转帐信息导入数据库 Start
   strSQL:='Insert Into TEMPAgtBankFlow
                 Select A.Agent_Mobile,A.Bank_Glide,
                   Decode(A.OPTCode,''100'',''交款交易'',''101'',''交款冲正'',''900'',''抹帐交易'',''类型不明'') as TradeType,A.Trade_Money,
                   TO_Char(To_Date(A.Trade_Date,''YYYYMMDD''),''YYYY-MM-DD'') as TradeDate,
                   TO_Char(To_Date(A.Trade_Time,''hh24miss''),''hh24:mi:ss'') as TradeTime,B.BankName,C.AreaCode,C.AreaName,
                   (Case When CheckFlag=-1 Then ''/Images/state_rollback.gif'' When SuccFlag=-1 Then ''/Images/state_cancel.gif'' When StatusFlag=-1 Then ''/Images/state_unnormal.gif'' Else ''/Images/state_normal.gif'' End) as State,
                   A.CheckFlag,A.StatusFlag,A.SuccFlag
                 From Bank_Stream_Account A,BankInfoConfig B,AreaConfig C,SecAgtAccount D,FstAgtAccount E
                   Where A.Bank_ID=B.BankCode And Trim(A.Agent_Mobile)=D.AgtID And D.BossAgtID=E.AgtID And C.CityCode=E.CityCode ';
 
  IF AreaCode!
='0' Then   --条件1: 选择所有地区的信息
    
     strSQL:=strSQL ' And Trim(C.AreaCode)=''' AreaCode ''' ';
    
  End IF;  
    
  IF startTradeDate!=' ' Then  --条件2: 选择所有地区的信息,选择所有交易开始日期的信息

     strSQL:=strSQL ' And TO_Char(To_Date(A.Trade_Date,''YYYYMMDD''),''YYYY-MM-DD'')>=''' startTradeDate ''' ';       
          
  End If;
 
  IF endTradeDate!=' ' Then  --条件2: 选择所有地区的信息,选择所有交易截止日期的信息

     strSQL:=strSQL ' And TO_Char(To_Date(A.Trade_Date,''YYYYMMDD''),''YYYY-MM-DD'')<=''' endTradeDate ''' ';       
          
  End If;
 
  IF KeyWord!=' ' Then  --条件3: 选择所有地区的信息,选择所有交易日期的信息,选择和查询要害字匹配的信息
    
     strSQL:=strSQL '  And (D.AgtID Like''%' KeyWord '%'' Or TO_Char(A.BANK_GLIDE) Like ''%' KeyWord '%'' Or B.BankName Like ''%' KeyWord '%'') ';
 
  End If; 
                
      
  Execute Immediate strSQL;    
    ---功能:把满足条件的二级代理商转帐信息导入数据库 End

 Open Re_CURSOR For 'Select * From Sms_pay.TEMPAgtBankFlow Order by AgtID';  --生成返回结果集的Curso
 
 ret:=0;
 return;

 Exception

  when others then
  DBMS_OUTPUT.PUT_LINE(SQLERRM);
  ret:=999;  
  return;
  End GetAgtBankFlow;
 
 
 
 
  
 --功能描述:查询代理商钱包余额信息 writer: wang haibo 2004-08-24
 PROCEDURE GetAgtBalance(AreaCode in varchar2,KeyWord in varchar2,Re_CURSOR OUT T_CURSOR,ret out number)
   is
  pFSTAGTID VARCHAR2(13);
  pSECAgtID  VARCHAR2(13);
  pAgtBalance NUMBER(10,2);
  pAgtProfit  NUMBER(10,2);
  pAreaCode VARCHAR2(10);
  pAreaName VARCHAR2(30);
  pAgtCount NUMBER(10);
 
  IsExists number;
  subAgtNumber number;

 type c_GetBalance is ref cursor;

  FstCursor c_GetBalance;

  strSQL VARCHAR2(1024);
 

 Begin

  -- 打开游标,根据SQL语句获取1级代理商资料,然后根据1级代理商的资料获取2级代理的信息

  IF AreaCode!
='0' And KeyWord=' ' Then
  
     strSQL:='Select A.AgtID,'''',A.Agtcredit,A.AgtProfit,
             B.AreaCode,B.AreaName,0 From Sms_Pay.FstAgtAccount A,Sms_Pay.AreaConfig B
             Where A.IsActive=1 And A.CityCode=B.CityCode And B.AreaCode =''' AreaCode '''';          
    
       
  ElsIf (Trim(AreaCode)!='0' And KeyWord!=' ') Then
     strSQL:='Select A.AgtID,'''',A.Agtcredit,A.AgtProfit,
             B.AreaCode,B.AreaName,0 From Sms_Pay.FstAgtAccount A,Sms_Pay.AreaConfig B
             Where A.IsActive=1 And A.CityCode=B.CityCode And B.AreaCode =''' AreaCode
             ''' And (B.AreaName Like ''%' Trim(KeyWord) '%'' Or  A.AgtID Like ''%' Trim(KeyWord) '%'')';
 
  ElsIf (Trim(AreaCode)='0' And KeyWord=' ') Then
   
     strSQL:='Select A.AgtID,'''',A.Agtcredit,A.AgtProfit,
             B.AreaCode,B.AreaName,0 From Sms_Pay.FstAgtAccount A,Sms_Pay.AreaConfig B
             Where A.IsActive=1 And A.CityCode=B.CityCode';               
 
  Else
     strSQL:='Select A.AgtID,'''',A.Agtcredit,A.AgtProfit,
             B.AreaCode,B.AreaName,0 From Sms_Pay.FstAgtAccount A,Sms_Pay.AreaConfig B
             Where A.IsActive=1 And A.CityCode=B.CityCode
             And (B.AreaName Like ''%' KeyWord '%'' Or  A.AgtID Like ''%' KeyWord '%'')';
   
  End If;
 
  
  Open FstCursor For strSQL;

  --检查临时表是否已经存在,假如不存在,则创建,否则插入数据 start
 Select Count(*) Into IsExists from all_tables Where Trim(Table_Name)='TEMPAGTBALANCE';

 IF IsExists=0 Then
    strSQL:='CREATE GLOBAL TEMPORARY TABLE  SMS_PAY.TEMPAgtBalance
 
     (FSTAGTID VARCHAR2(13) ,SECAgtID  VARCHAR2(13),ParentID  VARCHAR2(13),
      AgtBalance NUMBER(10,2),AgtProfit NUMBER(10,2),AreaCode VARCHAR2(10),
      AreaName VARCHAR2(30),AgtCount NUMBER(10)) on commit preserve rows';

     --把临时表的创建选项由on commit delete rows改为on commit preserve rows; 
     --否则在调用的时候,回出现ORA-08103: object no longer exists
     --DBMS_OUTPUT.PUT_LINE(strSQL);
     Execute Immediate strSQL;
  Else
     execute immediate 'Truncate table Sms_pay.TEMPAgtBalance';
  End IF;
  --检查临时表是否已经存在,假如不存在,则创建,否则插入数据 end
      
 Loop

  Fetch FstCursor into pFSTAGTID,pSECAgtID, pAgtBalance,pAgtProfit,pAreaCode, pAreaName, pAgtCount ;
   
  Exit when FstCursor%NOTFOUND;

  --1:写1级代理商查询信息
  strSQL:='Insert into TEMPAgtBalance(FSTAGTID,SECAgtID, ParentID,AgtBalance,AgtProfit,AreaCode, AreaName, AgtCount)
           Values(''' pFSTAGTID ''',null,null,' pAgtBalance ',' pAgtProfit ',''' pAreaCode ''','''
            pAreaName ''',' pAgtCount ')';
   
    Execute Immediate strSQL;
   
  --2:写2级代理商查询信息
  strSQL:='Insert into TEMPAgtBalance Select null,AGTID,''' pFSTAGTID ''',AGTCREDIT,AGTPROFIT ,''' pAreaCode ''',''' pAreaName ''',0 From SecAgtAccount Where Trim(BOSSAGTID)=''' pFSTAGTID '''';
  
  Execute Immediate strSQL;
           
    --3:更新1级代理的下级别代理商数量
    strSQL:='Select Count(*) From TEMPAgtBalance Where SECAgtID is not null And ParentID=''' pFSTAGTID '''';
    --DBMS_OUTPUT.PUT_LINE(strSQL);
    Execute Immediate strSQL  Into subAgtNumber;
    --Select Count(*) Into subAgtNumber From TEMPAgtBalance Where SECAgtID is not null And ParentID=pFSTAGTID;
   
    DBMS_OUTPUT.PUT_LINE(subAgtNumber);
       
    strSQL:='Update TEMPAgtBalance Set AgtCount=' subAgtNumber ' Where SECAgtID is null And FSTAGTID=''' pFSTAGTID '''';
    Execute Immediate strSQL;

   
    --DBMS_OUTPUT.PUT_LINE(strSQL);
    --Update TEMPAgtBalance Set AgtCount=subAgtNumber Where SECAgtID is null And FSTAGTID=pFSTAGTID;
      
 End loop;
 
     
 Close FstCursor;

 Open Re_CURSOR For 'Select * From Sms_pay.TEMPAgtBalance';
 
 ret:=0;
 return;

 Exception

  when others then
  DBMS_OUTPUT.PUT_LINE(SQLERRM);
  ret:=999;  
  return;
  End GetAgtBalance;
 
 
 
End ;

 
上一篇:在oracle中编写树级代码 人气:420
下一篇:Oracle新手最常碰到的6个错误及解决方案 人气:356
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵