仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 619|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页编程之一个经由过程Oracle8i存储历程,前往纪录集的...

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:43:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
客户还是可以使用DBaaS系统所能提供的所有能力。数据库云服务消除了组织对专职人员、本地数据库存储设备的需要。他们不必安装、配置和维护任何软硬件。oracle|程序|存储历程|纪录集
提醒:在Oracle8i中,假如必要经由过程存储历程前往了局集,必要利用游标!

CREATEORREPLACEPACKAGEBODY"SMS_PAY"."SMSMAINT"
IS

--功效形貌:查询代办署理银行买卖流水信息writer:wanghaibo2004-08-24
PROCEDUREGetAgtBankFlow(AreaCodeinvarchar2,KeyWordinvarchar2,startTradeDateinvarchar2,endTradeDateinvarchar2,Re_CURSOROUTT_CURSOR,retoutnumber)
is

IsExistsnumber;

strSQLVARCHAR2(2048);


Begin

--反省一时表是不是已存在,假如不存在,则创立,不然拔出数据start
SelectCount(*)IntoIsExistsfromall_tablesWhereTable_Name=TEMPAGTBANKFLOW;


IFIsExists=0Then

strSQL:=CREATEGLOBALTEMPORARYTABLESMS_PAY.TEMPAgtBankFlow
(AGTIDVARCHAR2(13),BANK_GLIDENumber(12),TradeTypeVARCHAR2(20),Trade_MoneyNumber(14,2),
TRADEDATEVARCHAR2(10),TRADETIMEVARCHAR2(8),BankNAMEVARCHAR2(30),
AreaCodeVarchar2(30),AreaNameVARCHAR2(30),StateVARCHAR2(30),CheckFlagNumber(1),
StatusFlagNumber(1),SuccFlagNumber(1))oncommitpreserverows;

--把一时表的创立选项由oncommitdeleterows改成oncommitpreserverows;
--不然在挪用的时分,回呈现ORA-08103:objectnolongerexists

ExecuteImmediatestrSQL;

Else

ExecuteimmediateTruncatetableSms_pay.TEMPAGTBANKFLOW;

EndIF;
--反省一时表是不是已存在,假如不存在,则创立,不然拔出数据end

---功效:把满意前提的一级代办署理商转帐信息导进数据库Start

/*strSQL:=InsertIntoTEMPAgtBankFlow
SelectA.Agent_Mobile,A.Bank_Glide,
Decode(A.OPTCode,100,交款买卖,101,交款冲正,900,抹帐买卖,范例不明)asTradeType,A.Trade_Money,
TO_Char(To_Date(A.Trade_Date,YYYYMMDD),YYYY-MM-DD)asTradeDate,
TO_Char(To_Date(A.Trade_Time,hh24miss),hh24:mi:ss)asTradeTime,B.BankName,C.AreaCode,C.AreaName,
(CaseWhenCheckFlag=-1Then/Images/state_rollback.gifWhenSuccFlag=-1Then/Images/state_cancel.gifWhenStatusFlag=-1Then/Images/state_unnormal.gifElse/Images/state_normal.gifEnd)asState
FromBank_Stream_AccountA,BankInfoConfigB,AreaConfigC,FstAgtAccountD
WhereA.Bank_ID=B.BankCodeAndTrim(A.Agent_Mobile)=D.AgtIDAndC.CityCode=D.CityCode;

IFAreaCode!=0Then--前提1:选择一切区域的信息
strSQL:=strSQL||AndTrim(C.AreaCode)=||AreaCode||;
EndIF;

IFTradeDate!=Then--前提2:选择一切区域的信息,选择一切买卖日期的信息

strSQL:=strSQL||AndTO_Char(To_Date(A.Trade_Date,YYYYMMDD),YYYY-MM-DD)=||TradeDate||;

EndIf;

IFKeyWord!=Then--前提3:选择一切区域的信息,选择一切买卖日期的信息,选择和查询关头字婚配的信息

strSQL:=strSQL||And(D.AgtIDLike%||KeyWord||%OrTO_Char(A.BANK_GLIDE)Like%||KeyWord||%OrB.BankNameLike%||KeyWord||%);

EndIf;

ExecuteImmediatestrSQL;

---功效:把满意前提的一级代办署理商转帐信息导进数据库End
*/

---功效:把满意前提的二级代办署理商转帐信息导进数据库Start
strSQL:=InsertIntoTEMPAgtBankFlow
SelectA.Agent_Mobile,A.Bank_Glide,
Decode(A.OPTCode,100,交款买卖,101,交款冲正,900,抹帐买卖,范例不明)asTradeType,A.Trade_Money,
TO_Char(To_Date(A.Trade_Date,YYYYMMDD),YYYY-MM-DD)asTradeDate,
TO_Char(To_Date(A.Trade_Time,hh24miss),hh24:mi:ss)asTradeTime,B.BankName,C.AreaCode,C.AreaName,
(CaseWhenCheckFlag=-1Then/Images/state_rollback.gifWhenSuccFlag=-1Then/Images/state_cancel.gifWhenStatusFlag=-1Then/Images/state_unnormal.gifElse/Images/state_normal.gifEnd)asState,
A.CheckFlag,A.StatusFlag,A.SuccFlag
FromBank_Stream_AccountA,BankInfoConfigB,AreaConfigC,SecAgtAccountD,FstAgtAccountE
WhereA.Bank_ID=B.BankCodeAndTrim(A.Agent_Mobile)=D.AgtIDAndD.BossAgtID=E.AgtIDAndC.CityCode=E.CityCode;

IFAreaCode!=0Then--前提1:选择一切区域的信息

strSQL:=strSQL||AndTrim(C.AreaCode)=||AreaCode||;

EndIF;

IFstartTradeDate!=Then--前提2:选择一切区域的信息,选择一切买卖入手下手日期的信息

strSQL:=strSQL||AndTO_Char(To_Date(A.Trade_Date,YYYYMMDD),YYYY-MM-DD)>=||startTradeDate||;

EndIf;

IFendTradeDate!=Then--前提2:选择一切区域的信息,选择一切买卖停止日期的信息

strSQL:=strSQL||AndTO_Char(To_Date(A.Trade_Date,YYYYMMDD),YYYY-MM-DD)<=||endTradeDate||;

EndIf;

IFKeyWord!=Then--前提3:选择一切区域的信息,选择一切买卖日期的信息,选择和查询关头字婚配的信息

strSQL:=strSQL||And(D.AgtIDLike%||KeyWord||%OrTO_Char(A.BANK_GLIDE)Like%||KeyWord||%OrB.BankNameLike%||KeyWord||%);

EndIf;


ExecuteImmediatestrSQL;
---功效:把满意前提的二级代办署理商转帐信息导进数据库End

OpenRe_CURSORForSelect*FromSms_pay.TEMPAgtBankFlowOrderbyAgtID;--天生前往了局集的Curso

ret:=0;
return;

Exception

whenothersthen
DBMS_OUTPUT.PUT_LINE(SQLERRM);
ret:=999;
return;
EndGetAgtBankFlow;





--功效形貌:查询代办署理商钱包余额信息writer:wanghaibo2004-08-24
PROCEDUREGetAgtBalance(AreaCodeinvarchar2,KeyWordinvarchar2,Re_CURSOROUTT_CURSOR,retoutnumber)
is
pFSTAGTIDVARCHAR2(13);
pSECAgtIDVARCHAR2(13);
pAgtBalanceNUMBER(10,2);
pAgtProfitNUMBER(10,2);
pAreaCodeVARCHAR2(10);
pAreaNameVARCHAR2(30);
pAgtCountNUMBER(10);

IsExistsnumber;
subAgtNumbernumber;

typec_GetBalanceisrefcursor;

FstCursorc_GetBalance;

strSQLVARCHAR2(1024);


Begin

--翻开游标,依据SQL语句猎取1级代办署理商材料,然后依据1级代办署理商的材料猎取2级代办署理的信息

IFAreaCode!=0AndKeyWord=Then

strSQL:=SelectA.AgtID,,A.Agtcredit,A.AgtProfit,
B.AreaCode,B.AreaName,0FromSms_Pay.FstAgtAccountA,Sms_Pay.AreaConfigB
WhereA.IsActive=1AndA.CityCode=B.CityCodeAndB.AreaCode=||AreaCode||;


ElsIf(Trim(AreaCode)!=0AndKeyWord!=)Then
strSQL:=SelectA.AgtID,,A.Agtcredit,A.AgtProfit,
B.AreaCode,B.AreaName,0FromSms_Pay.FstAgtAccountA,Sms_Pay.AreaConfigB
WhereA.IsActive=1AndA.CityCode=B.CityCodeAndB.AreaCode=||AreaCode||
And(B.AreaNameLike%||Trim(KeyWord)||%OrA.AgtIDLike%||Trim(KeyWord)||%);

ElsIf(Trim(AreaCode)=0AndKeyWord=)Then

strSQL:=SelectA.AgtID,,A.Agtcredit,A.AgtProfit,
B.AreaCode,B.AreaName,0FromSms_Pay.FstAgtAccountA,Sms_Pay.AreaConfigB
WhereA.IsActive=1AndA.CityCode=B.CityCode;

Else
strSQL:=SelectA.AgtID,,A.Agtcredit,A.AgtProfit,
B.AreaCode,B.AreaName,0FromSms_Pay.FstAgtAccountA,Sms_Pay.AreaConfigB
WhereA.IsActive=1AndA.CityCode=B.CityCode
And(B.AreaNameLike%||KeyWord||%OrA.AgtIDLike%||KeyWord||%);

EndIf;


OpenFstCursorForstrSQL;

--反省一时表是不是已存在,假如不存在,则创立,不然拔出数据start
SelectCount(*)IntoIsExistsfromall_tablesWhereTrim(Table_Name)=TEMPAGTBALANCE;

IFIsExists=0Then
strSQL:=CREATEGLOBALTEMPORARYTABLESMS_PAY.TEMPAgtBalance
(FSTAGTIDVARCHAR2(13),SECAgtIDVARCHAR2(13),ParentIDVARCHAR2(13),
AgtBalanceNUMBER(10,2),AgtProfitNUMBER(10,2),AreaCodeVARCHAR2(10),
AreaNameVARCHAR2(30),AgtCountNUMBER(10))oncommitpreserverows;

--把一时表的创立选项由oncommitdeleterows改成oncommitpreserverows;
--不然在挪用的时分,回呈现ORA-08103:objectnolongerexists
--DBMS_OUTPUT.PUT_LINE(strSQL);
ExecuteImmediatestrSQL;
Else
executeimmediateTruncatetableSms_pay.TEMPAgtBalance;
EndIF;
--反省一时表是不是已存在,假如不存在,则创立,不然拔出数据end

Loop

FetchFstCursorintopFSTAGTID,pSECAgtID,pAgtBalance,pAgtProfit,pAreaCode,pAreaName,pAgtCount;

ExitwhenFstCursor%NOTFOUND;

--1:写1级代办署理商查询信息
strSQL:=InsertintoTEMPAgtBalance(FSTAGTID,SECAgtID,ParentID,AgtBalance,AgtProfit,AreaCode,AreaName,AgtCount)
Values(||pFSTAGTID||,null,null,||pAgtBalance||,||pAgtProfit||,||pAreaCode||,
||pAreaName||,||pAgtCount||);

ExecuteImmediatestrSQL;

--2:写2级代办署理商查询信息
strSQL:=InsertintoTEMPAgtBalanceSelectnull,AGTID,||pFSTAGTID||,AGTCREDIT,AGTPROFIT,||pAreaCode||,||pAreaName||,0FromSecAgtAccountWhereTrim(BOSSAGTID)=||pFSTAGTID||;

ExecuteImmediatestrSQL;

--3:更新1级代办署理的上级别代办署理商数目
strSQL:=SelectCount(*)FromTEMPAgtBalanceWhereSECAgtIDisnotnullAndParentID=||pFSTAGTID||;
--DBMS_OUTPUT.PUT_LINE(strSQL);
ExecuteImmediatestrSQLIntosubAgtNumber;
--SelectCount(*)IntosubAgtNumberFromTEMPAgtBalanceWhereSECAgtIDisnotnullAndParentID=pFSTAGTID;

DBMS_OUTPUT.PUT_LINE(subAgtNumber);

strSQL:=UpdateTEMPAgtBalanceSetAgtCount=||subAgtNumber||WhereSECAgtIDisnullAndFSTAGTID=||pFSTAGTID||;
ExecuteImmediatestrSQL;

--DBMS_OUTPUT.PUT_LINE(strSQL);
--UpdateTEMPAgtBalanceSetAgtCount=subAgtNumberWhereSECAgtIDisnullAndFSTAGTID=pFSTAGTID;

Endloop;


CloseFstCursor;

OpenRe_CURSORForSelect*FromSms_pay.TEMPAgtBalance;

ret:=0;
return;

Exception

whenothersthen
DBMS_OUTPUT.PUT_LINE(SQLERRM);
ret:=999;
return;
EndGetAgtBalance;



End;


只需每年花费2000到5000美元。无论你是自掏腰包来创建一个新兴公司,还是得到了风险投资商的赞助,使用MySQL都可以降低你所需要的人力成本。
9#
发表于 2015-3-22 20:47:17 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
小妖女 该用户已被删除
8#
发表于 2015-3-16 06:15:16 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-8 16:44:19 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
若天明 该用户已被删除
6#
发表于 2015-2-26 19:20:32 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
admin 该用户已被删除
5#
发表于 2015-2-9 02:51:54 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
乐观 该用户已被删除
地板
发表于 2015-2-3 13:31:14 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-25 18:49:42 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
活着的死人 该用户已被删除
沙发
发表于 2015-1-19 21:46:18 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表