Luke
Luke

Reputation: 31

using a select query to create a record in plsql

Probably a really easy question but I created a record that has 3 columns. The third column I am going to assign a value later. The query selects 2 columns for the record. What am I missing? The error that is thrown is that there are "too many values" in my select statment.

create or replace Procedure Pledges3 
(IDdonor In Int, flag Out Varchar)
as 
type allPledges is record(iddonor dd_pledge.iddonor%type, idstatus dd_status.idstatus%type, flag Varchar(25));
allPledges2 allpledges;
Begin
Select dd_pledge.iddonor, dd_status.idstatus 
  into allpledges2 
    from dd_donor
      join dd_pledge on dd_donor.iddonor=dd_pledge.iddonor
        join dd_status on dd_pledge.idstatus=dd_status.idstatus
          where dd_pledge.IDdonor=305;
    if allpledges2.idstatus = '10' THEN 
     Flag := 'True';
      elsif allpledges2.idstatus= '20' THEN 
        Flag := 'False';
    End if;
    dbms_output.put_line(flag);
End;

Upvotes: 1

Views: 137

Answers (1)

Vinish Kapoor
Vinish Kapoor

Reputation: 679

Check the below code, corrected:

create or replace Procedure Pledges3 
(IDdonor In Int, flag Out Varchar)
as 
type allPledges is record(iddonor dd_pledge.iddonor%type, idstatus dd_status.idstatus%type, flag Varchar(25));
allPledges2 allpledges;
Begin
Select dd_pledge.iddonor, dd_status.idstatus, null 
  into allpledges2 
    from dd_donor
      join dd_pledge on dd_donor.iddonor=dd_pledge.iddonor
        join dd_status on dd_pledge.idstatus=dd_status.idstatus
          where dd_pledge.IDdonor=305;
    if allpledges2.idstatus = '10' THEN 
     allPledges2.Flag := 'True';
      elsif allpledges2.idstatus= '20' THEN 
        allPledges2.Flag := 'False';
    End if;
    dbms_output.put_line(allPledges2.flag);
End;

Upvotes: 1

Related Questions