Search code examples
oraclestored-proceduresplsqlcursorrecord

Creating a Cursor and Procedure


I created a Cursor for a procedure. I am trying to apply a flag to records in that cursor.

Create or Replace Procedure Pledges 
(IDdonor In Int)
is 
Cursor Cur_Pledges is 
Select dd_pledge.iddonor, dd_status.idstatus from dd_donor
join dd_pledge on dd_donor.iddonor=dd_pledge.iddonor
join dd_status on dd_pledge.idstatus=dd_status.idstatus;
Type All_Pledges2 is record(iddonor dd_pledge.iddonor%type, idstatus dd_status.idstatus%type, flag Varchar2(10));
Begin
  For Rec_Pledges in Cur_Pledges LOOP
    if rec_pledges.idstatus = '10' THEN Flag := 'True';
      elsif rec_pledges.idstatus= '20' THEN Flag := 'False';
    End if;
  Insert Into All_Pledges
    Values(rec_pledges.idddonor, rec_pledges.idstatus, flag);
  End Loop;
End;

Solution

  • You are wrongly using the type record variable, I have made the changes please check below, this will work:

    Create or Replace Procedure Pledges 
    (IDdonor In Int)
    is 
    Cursor Cur_Pledges is 
    Select dd_pledge.iddonor, dd_status.idstatus from dd_donor
    join dd_pledge on dd_donor.iddonor=dd_pledge.iddonor
    join dd_status on dd_pledge.idstatus=dd_status.idstatus;
    Type All_Pledges2 is record(iddonor dd_pledge.iddonor%type, idstatus dd_status.idstatus%type, flag Varchar2(10));
    -- new change below
    allpledges2 All_Pledges2;
    Begin
      For Rec_Pledges in Cur_Pledges LOOP
        if rec_pledges.idstatus = '10' THEN 
          allpledges2.Flag := 'True';
          elsif rec_pledges.idstatus= '20' THEN 
          allpledges2.Flag := 'False';
        End if;
      Insert Into All_Pledges
        Values(rec_pledges.iddonor, rec_pledges.idstatus, allpledges2.flag);
      End Loop;
    End;