tcbs_批量儲存過程_sql_case when_示例
昨天在分析貸款逾期儲存過程,碰到如下游標定義:
(CASE
WHEN(CASE
WHEN NVL(MM.ProdOrgYN, 'N') = 'Y' THEN 'Y' ELSE 'N'
END) = 'Y'
THEN
CASE WHEN
pack_osi_util.IsBusDay_Org(AR.DueDate + NVL(AL.GraceDays, 0)) = 'Y'
THEN
CASE WHEN
AR.DueDate + NVL(AL.GraceDays, 0) =
To_Date('2019-12-20', 'yyyy-mm-dd') THEN 'Y' ELSE 'N'
END
ELSE CASE WHEN
pack_osi_util.GetBusDateForward_Org(AR.DueDate +
NVL(AL.GraceDays, 0),
1) =
To_Date('2019-12-20', 'yyyy-mm-dd') THEN 'Y' ELSE 'N'
END
END
ELSE
CASE WHEN
AR.DueDate + NVL(AL.GraceDays, 0) =
To_Date('2019-12-20', 'yyyy-mm-dd') THEN 'Y' ELSE 'N' END
END) = 'Y'
分析了大半天,
小結:
case when end也可用於where條件,以前我只用於select中
case when可以多級巢狀,如:
select
case when (另一個case when表示式)='某個值'
case when end --其為子case when語句
再次說明sql的博大精深,要努力啊
為了備記,特附上相關貸款逾期的遊標:
CURSOR curs_GetOverdueAccounts IS
SELECT ASA.AcctNbr,
ASA.SubAcctNbr,
ASA.BalTypCd,
AL.GraceDays
FROM Acct A,
AcctSubAcct ASA,
AcctLoan AL,
AcctRcvb AR,
RcvbStat RS,
MjMiAcctBalCatTyp MMBC,
MjMiAcctTyp MM--BBP修改對公日曆時增加
WHERE A.CurrAcctStatCd IN ( 'ACT',
'NPFM')
AND A.AcctNbr = AR.AcctNbr
AND AL.AcctNbr = AR.AcctNbr
/*BIBAOPING--修改對公日曆時註釋掉--Start:2010-09-27
AND ( AR.DueDate + AL.GraceDays >= cpdFromDate AND
AR.DueDate + AL.GraceDays <= cpdThruDate )
BIBAOPING--修改對公日曆時註釋掉--end:2010-09-27 */
/*THE RCVBSTATE IS PPD(Partially Paid) AND ACT(Active)*/
AND RS.RcvbStatCd = AR.CurrRcvbStatCd
AND RS.PaidYN = 'N'
AND ASA.AcctNbr = AR.AcctNbr
AND ASA.SubAcctNbr = AR.SubAcctNbr
/*THE FILTER OF ACCOUNTS THAT NOT CONFIG THE BALANCE TYPE*/
AND MMBC.MjAcctTypCd = A.MjAcctTypCd
AND MMBC.MiAcctTypCd = A.CurrMiAcctTypCd
AND MMBC.BalCatCd = ASA.BalCatCd
AND MMBC.BalTypCd = ASA.BalTypCd
-- AND A.ACCTNBR=183903044990 --WFZ TEST
--AND MMBC.PaymentSeqNbr > 0
/*BIBAOPING--修改對公日曆時增加--Start:2010-09-27*/
AND MMBC.MjAcctTypCd=MM.MjAcctTypCd--BBP
AND MMBC.MiAcctTypCd=MM.MiAcctTypCd--BBP
/*BIBAOPING--修改對公日曆時增加--End:2010-09-27*/
AND (AR.AcctNbr,
AR.SubAcctNbr) IN(
SELECT ACCTNBR,
SubAcctNbr
FROM AcctSubAcct
WHERE BalCatCd=lcsBalCatCd_NOTE
AND( /*NOTE/BAL:ODP/BAL|ODP/INT*/
(BaltypCd=lcsBalTypCd_BAL
AND AcctNbr IN(
SELECT ODPBALTABLE.AcctNbr
FROM (SELECT AcctNbr FROM AcctSubAcct where balcatcd=lcsBalCatCd_ODP and BaltypCd=lcsBalTypCd_BAL)ODPBALTABLE,
(SELECT AcctNbr FROM AcctSubAcct where balcatcd=lcsBalCatCd_ODP and BaltypCd=lcsBalTypCd_INT)ODPINTTABLE
WHERE ODPBALTABLE.AcctNbr=ODPINTTABLE.AcctNbr))
OR /*NOTE/INT:ODI/BAL|ODI/INT*/
(BaltypCd=lcsBalTypCd_INT
AND AcctNbr IN(
SELECT ODIBALTABLE.AcctNbr
FROM (SELECT AcctNbr FROM AcctSubAcct where balcatcd=lcsBalCatCd_ODI and BaltypCd=lcsBalTypCd_BAL)ODIBALTABLE,
(SELECT AcctNbr FROM AcctSubAcct where balcatcd=lcsBalCatCd_ODI and BaltypCd=lcsBalTypCd_INT)ODIINTTABLE
WHERE ODIBALTABLE.AcctNbr=ODIINTTABLE.AcctNbr))
)
GROUP BY ACCTNBR,
SubAcctNbr)
/*BIBAOPING--修改對公日曆時增加--Start:2010-09-27*/
AND (
CASE WHEN (CASE WHEN NVL(MM.ProdOrgYN, 'N') = 'Y' THEN 'Y' ELSE 'N' END) = 'Y' THEN
CASE WHEN pack_osi_util.IsBusDay_Org(AR.DueDate + NVL(AL.GraceDays,0)) = 'Y' THEN
CASE WHEN AR.DueDate + NVL(AL.GraceDays,0) = To_Date(in_EFFDATE,'yyyy-mm-dd') THEN 'Y' ELSE 'N' END
ELSE
CASE WHEN pack_osi_util.GetBusDateForward_Org(AR.DueDate + NVL(AL.GraceDays,0), 1)=To_Date(in_EFFDATE,'yyyy-mm-dd') THEN 'Y' ELSE 'N' END
END
ELSE
CASE WHEN AR.DueDate + NVL(AL.GraceDays,0) = To_Date(in_EFFDATE,'yyyy-mm-dd') THEN 'Y' ELSE 'N' END
END
) = 'Y'
/*BIBAOPING--修改對公日曆時增加--End:2010-09-27*/
--AND a.acctnbr in (200000683469) -- test for NRS
GROUP BY ASA.AcctNbr,
ASA.SubAcctNbr,
ASA.BalTypCd,
AL.GraceDays
ORDER BY ASA.AcctNbr,
ASA.SubAcctNbr;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-732252/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- tcbs_批量儲存過程_plsql事務_savepoint_異常儲存過程SQL
- tcbs_批量儲存過程_輸出引數out與異常的關係儲存過程
- SQL儲存過程示例SQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- tcbs_批量儲存過程_輸入引數為空與非空的分支編寫儲存過程
- MyBatis 示例之儲存過程MyBatis儲存過程
- 儲存過程批量生成awr指令碼儲存過程指令碼
- 批量插入資料的儲存過程儲存過程
- JDBC 呼叫儲存過程程式碼示例JDBC儲存過程
- oracle動態sql儲存過程示例OracleSQL儲存過程
- Oracle '批量'禁用外來鍵的儲存過程Oracle儲存過程
- 【實戰】oracle job + 儲存過程 的使用示例Oracle儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 儲存過程儲存過程
- SQL Server系統儲存過程和引數示例SQLServer儲存過程
- mssql sqlserver 批量刪除所有儲存過程的方法分享SQLServer儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- MySQL儲存過程in、out、inout引數示例與總結MySql儲存過程
- oracle procedure 儲存過程輸入及輸出in out示例Oracle儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- 使用儲存過程儲存過程
- sybase儲存過程儲存過程
- java儲存過程Java儲存過程
- 管理儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- 實戰儲存過程排程過程儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- oracle批量生成日期字尾的表儲存過程程式碼Oracle儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- 把自編儲存過程設定為系統儲存過程儲存過程
- 儲存過程 傳 datatable儲存過程
- 儲存過程——遊標儲存過程