MYSQL网页编程之一个经由过程Oracle8i存储历程,前往纪录集的...
客户还是可以使用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都可以降低你所需要的人力成本。 代替了原来VB式的错误判断。比Oracle高级不少。 始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。 作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题! 分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。 多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。 一个是把SQL语句写到客户端,可以使用DataSet进行加工; 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
页:
[1]