Home » SQL & PL/SQL » SQL & PL/SQL » Cursor For Loop (Oracle 10g)
Cursor For Loop [message #562155] Mon, 30 July 2012 00:26 Go to next message
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 #562156 is a reply to message #562155] Mon, 30 July 2012 00:53 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

what it contains...MSB.BAD_ASSET
Re: Cursor For Loop [message #562159 is a reply to message #562156] Mon, 30 July 2012 00:57 Go to previous messageGo to next message
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 Go to previous message
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
Previous Topic: I need to put amount '0' if the row exist but has no amount in my "where " conditions.
Next Topic: multiple submit button in a single form
Goto Forum:
  


Current Time: Tue Aug 19 20:06:10 CDT 2025