ExcepOra
ExcepOra

Reputation: 117

How to pass cursor rowtype between procedures in package

I have an explicit cursor in package, I create rowtype based on this cursor, how can I pass this rowtype between procedures? My exmaple hung up when compile.

cursor cur(param) is 
select * from dual where param = 1;
rec cur%rowtype;

procedure do_something_with_rec(p_rec in cur%rowtype)
is
begin
  dbms_output.put_line(p_rec.dummy);
end;

procedure main(param)
is
begin
 open cur(param);
 loop
   fetch into rec;
   exit when cur%notfound;
 end loop;
 close cur;

 do_something_with_rec(rec);
end;

Upvotes: 2

Views: 2607

Answers (1)

Ponder Stibbons
Ponder Stibbons

Reputation: 14858

You forgot to add parameter types in cursor, definition of procedure main and in fetch add cursor name. This package compiled and worked:

-- package

create or replace package p_test is

  procedure main(param in number);

end p_test;

-- body

create or replace package body p_test is

  cursor cur(param in number) is select * from dual where param = 1;
  rec cur%rowtype;

procedure do_something_with_rec(p_rec in cur%rowtype) is
begin
  dbms_output.put_line(p_rec.dummy);
end;

procedure main(param in number) is
begin
  open cur(param);
  loop
    fetch cur into rec;
    exit when cur%notfound;
  end loop;
  close cur;

  do_something_with_rec(rec);
end;
end p_test;

Upvotes: 2

Related Questions