| Cursor For Loop [message #562155] |
Mon, 30 July 2012 00:26  |
 |
vino06cse57
Messages: 131 Registered: July 2011 Location: chennai
|
Senior Member |
|
|
hi
i need your help in Cursor for loop.
When a cursor returns no records,how to handle this in Cursor for loop..
I had given sample code for handling this by using normal open,fetch statement,
please provide by applying for -Cursor For loop
DECLARE
P_BU_ID NUMBER;
P_SUMRY_DATA_TY_ID NUMBER;
P_OP_DATE VARCHAR2(32767);
P_PROC_DATE VARCHAR2(32767);
P_FIN_YEAR NUMBER;
P_FIN_PERIOD NUMBER;
BEGIN
P_BU_ID := 674;
P_SUMRY_DATA_TY_ID := 25;
P_OP_DATE := '2011-02-01';
P_PROC_DATE := '2011-02-01';
P_FIN_YEAR := 2011;
P_FIN_PERIOD := 02;
MSB.BAD_ASSET ( P_BU_ID, P_SUMRY_DATA_TY_ID, P_OP_DATE, P_PROC_DATE, P_FIN_YEAR, P_FIN_PERIOD );
COMMIT;
END;
|
|
|
|
|
|
| Re: Cursor For Loop [message #562159 is a reply to message #562156] |
Mon, 30 July 2012 00:57   |
 |
vino06cse57
Messages: 131 Registered: July 2011 Location: chennai
|
Senior Member |
|
|
CREATE OR REPLACE PROCEDURE MSB.BAD_ASSET (P_BU_ID IN NUMBER,
P_SUMRY_DATA_TY_ID IN NUMBER,
P_OP_DATE IN VARCHAR2,
P_PROC_DATE IN VARCHAR2,
P_FIN_YEAR IN NUMBER,
P_FIN_PERIOD IN NUMBER)
AS
V_SUMRY_DATA_TY_BU_MONTHLY_DET NUMBER;
V_SUMRY_DATA_TY_BU_YEARLY_DET NUMBER;
V_BU_MONTH_SUMMRY NUMBER;
V_SUMRYTYPE_BU_MONTHLY NUMBER;
V_SUMRYTYPE_BANK_MONTHLY NUMBER;
V_SUMRYTYPE_BU_YEARLY NUMBER;
V_SUMRYTYPE_BANK_YEARLY NUMBER;
V_OBJECT_ID NUMBER;
V_UNIT_OF_MEASURE VARCHAR2 (20);
V_OBJECT_TYPE varchar2(20);
V_LOCAL_CRNCY NUMBER;
V_CONVERT_TOTAL VARCHAR2 (100);
V_BUY_RATE_SHEET NUMBER;
V_SELL_RATE_SHEET NUMBER;
V_BUY_INDEX NUMBER;
V_SELL_INDEX NUMBER;
CURSOR CUR1
IS
SELECT T2.CRNCY_ID, NVL (SUM (T3.CLEARED_BAL), 0) AS BALANCE
FROM CUSTOMER T1,
LOAN_ACCOUNT_SUMMARY T3,
LOAN_ACCOUNT T2,
BUSINESS_UNIT T4
WHERE T1.CUST_ID = T2.CUST_ID
AND T1.RISK_ID IN
( (SELECT PARAM_VALUE
FROM CTRL_PARAMETER
WHERE PARAM_CD = 'S107'),
(SELECT PARAM_VALUE
FROM CTRL_PARAMETER
WHERE PARAM_CD = 'S108'),
(SELECT PARAM_VALUE
FROM CTRL_PARAMETER
WHERE PARAM_CD = 'S758'))
AND T2.ACCT_ID = T3.ACCT_ID
AND T4.BU_ID = T2.BU_ID
AND T4.BU_ID = P_BU_ID
AND TRUNC (T3.LAST_PAYMENT_DT) =
TO_DATE (P_OP_DATE, 'YYYY-MM-DD')
GROUP BY T2.CRNCY_ID;
V_CUR1 Cur1%rowtype;
PTD number;
YTD number;
BEGIN
open CUR1;
fetch CUR1 into V_CUR1;
loop
if CUR1%FOUND then
IF (V_CUR1.CRNCY_ID = V_LOCAL_CRNCY)
THEN
V_BU_MONTH_SUMMRY := V_BU_MONTH_SUMMRY + V_CUR1.BALANCE;
ELSE
V_CONVERT_TOTAL :=
CRNCY_CONVERSION_PKG.CONVERT (V_CUR1.CRNCY_ID,
V_LOCAL_CRNCY,
V_BUY_RATE_SHEET,
V_SELL_RATE_SHEET,
V_BUY_INDEX,
V_SELL_INDEX,
TO_CHAR (V_CUR1.BALANCE),
P_BU_ID);
V_BU_MONTH_SUMMRY :=
V_BU_MONTH_SUMMRY + TO_NUMBER (V_CONVERT_TOTAL);
END IF;
exit when cur1%notfound;
end if;
END LOOP;
close cur1;
|
|
|
|
| Re: Cursor For Loop [message #562160 is a reply to message #562159] |
Mon, 30 July 2012 01:06  |
 |
Michel Cadot
Messages: 68765 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
Put the exit before "IF (V_CUR1.CRNCY_ID = V_LOCAL_CRNCY" then you have not to test " if CUR1%FOUND then".
IS
...
BEGIN
open CUR1;
LOOP
fetch CUR1 into V_CUR1;
exit when cur1%notfound;
... <do here what you want to do with the fetched values>
END LOOP;
END;
Regards
Michel
|
|
|
|