提示:在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 ;
相关推荐
程序包说明和程序包体 8-16 内置程序包 8-17 触发器 8-18 触发事件 8-19 锁定 8-20 锁定机制 8-21 数据并发处理 8-22 DML 锁定 8-24 排队机制 8-25 锁定冲突 8-26 锁定冲突的可能原因 8-27 检测锁定冲突 ...
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle...通过两个完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程...
2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...
5. 下面的各选项中哪一个正确描述了Oracle数据库的逻辑存储结构? ( A ) A. 表空间由段组成,段由盘区组成,盘区由数据块组成 B. 段由表空间组成,表空间由盘区组成,盘区由数据块组成 C. 盘区由数据块组成,数据块由...
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle...通过两个完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程...
值范围: Oracle8i National Language Support Guide 中指定的任何有效的10 字节字符串。 默认值: 从 NLS_TERRITORY 中获得 nls_date_language: 说明: 指定拼写日期名, 月名和日期缩写词 (AM, PM, AD, BC) 的语言。...
dictionary 全部数据字典表的名称和解释,它有一个同义词dict dict_column 全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL>select * from dictionary ...
4.5 程序包 4.5.1 基本原理 4.5.2 创建包 4.5.3 调用包 4.5.4 删除包 4.6 触发器 4.6.1 触发器的基本原理 4.6.2 创建触发器 4.6.3 执行触发器 4.6.4 删除触发器 第5章 熟悉SQL*Plus-Oracle数据库环境 5.1 进入和...
4.5 程序包 4.5.1 基本原理 4.5.2 创建包 4.5.3 调用包 4.5.4 删除包 4.6 触发器 4.6.1 触发器的基本原理 4.6.2 创建触发器 4.6.3 执行触发器 4.6.4 删除触发器 第5章 熟悉SQL*Plus-Oracle数据库环境 5.1 进入和...
2.3.1为服务器配置4个网卡 2.3.2安装Linux操作系统 2.3.3挂载iSCSI磁盘 2.3.4配置udev固定iSCSI磁盘设备名称 2.3.5配置服务器的图形化环境 2.4 RAC运行环境安装前检查 2.4.1服务器检查 2.4.2存储检查 2.4.3...
表空间传输是8i新增加的一种快速在数据库间移动数据的一种办法,是把一个数据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成Dmp文件,这在有些时候是非常管用的,因为传输表空间移动数据就象复制...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 目录 第一讲 Oacle关系数据库 9 一. Oracle的安装 9 二. 用浏览器进入em 企业管理器 11 三.启动DBCA的方法 11 四.服务设置 11...
存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 (2)存储过程的基本写法...
[Q]可以利用utl_smtp包发邮件,以下是一个发送简单邮件的例子程序 14 [Q]可以利用utl_file包,但是,在此之前,要注意设置好Utl_file_dir初始化参数 15 第二部分、ORACLE构架体系 16 [Q]ORACLE的有那些数据类型 16 ...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
构建 OracleCommand 对象(用来返回一个结果集,而不是一个整数值); 17.执行存储过程,返回影响的行数; 18.创建 OracleCommand 对象实例(用来返回一个整数值) 复制代码 6.DbHelperSQLite类 [code=csharp] 1.数据访问...
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java...