无法在 Oracle 的 Sys RefCursor 中使用联接
Unable to use Joins in Sys RefCursor in Oracle
我想将 sys_refcursor 作为参数传递给 PL/SQL 中的过程。
我使用以下代码创建了一个过程
create or replace procedure reffunmani(
cname varchar2,
mysys out sys_refcursor)
is
begin
open mysys for
select /*c.ins_id,c.cname, c.start_date,*/i.ins_id,i.ins_name
from course c,institution i where c.ins_id=i.ins_id
order by c.start_date;
end;
/
show errors;
并且我在匿名块中调用了相同的过程
declare
mysys sys_refcursor;
rec institution%rowtype;
begin
reffunmani('MCA',mysys);
loop
fetch mysys into rec;
exit when mysys%notfound;
dbms_output.put_line(rec.ins_id||' '||rec.ins_name);
end loop;
close mysys;
end;
/
当我执行匿名块时,出现错误
ORA-06504: PL/SQL: Return types of Result Set variables or query do not match
ORA-06512: at line 7
请注意 institution
table 有 5 列。
您正在将游标中的数据提取到局部变量中 rec
。该记录被定义为 institution%rowtype
类型。当且仅当游标实际返回 institution
table 中的所有列(与它们在 table 中定义的顺序相同)时,这才有效。由于这里不是这种情况,您有几个选择。
首先,您可以简单地定义一些标量变量并将数据提取到这些变量中
declare
mysys sys_refcursor;
l_ins_id institution.ins_id%type;
l_ins_name institution.ins_name%type;
begin
reffunmani('MCA',mysys);
loop
fetch mysys into l_ins_id, l_ins_name;
exit when mysys%notfound;
dbms_output.put_line(l_ins_id||' '||l_ins_name);
end loop;
close mysys;
end;
/
或者,您可以声明具有两个字段的本地记录类型并将数据提取到其中
declare
mysys sys_refcursor;
-- I'm guessing at your data types here
type typ_my_rec is record (
ins_id integer,
ins_name varchar2(100)
);
rec typ_my_rec;
begin
reffunmani('MCA',mysys);
loop
fetch mysys into rec;
exit when mysys%notfound;
dbms_output.put_line(rec.ins_id||' '||rec.ins_name);
end loop;
close mysys;
end;
/
我想将 sys_refcursor 作为参数传递给 PL/SQL 中的过程。 我使用以下代码创建了一个过程
create or replace procedure reffunmani(
cname varchar2,
mysys out sys_refcursor)
is
begin
open mysys for
select /*c.ins_id,c.cname, c.start_date,*/i.ins_id,i.ins_name
from course c,institution i where c.ins_id=i.ins_id
order by c.start_date;
end;
/
show errors;
并且我在匿名块中调用了相同的过程
declare
mysys sys_refcursor;
rec institution%rowtype;
begin
reffunmani('MCA',mysys);
loop
fetch mysys into rec;
exit when mysys%notfound;
dbms_output.put_line(rec.ins_id||' '||rec.ins_name);
end loop;
close mysys;
end;
/
当我执行匿名块时,出现错误
ORA-06504: PL/SQL: Return types of Result Set variables or query do not match
ORA-06512: at line 7
请注意 institution
table 有 5 列。
您正在将游标中的数据提取到局部变量中 rec
。该记录被定义为 institution%rowtype
类型。当且仅当游标实际返回 institution
table 中的所有列(与它们在 table 中定义的顺序相同)时,这才有效。由于这里不是这种情况,您有几个选择。
首先,您可以简单地定义一些标量变量并将数据提取到这些变量中
declare
mysys sys_refcursor;
l_ins_id institution.ins_id%type;
l_ins_name institution.ins_name%type;
begin
reffunmani('MCA',mysys);
loop
fetch mysys into l_ins_id, l_ins_name;
exit when mysys%notfound;
dbms_output.put_line(l_ins_id||' '||l_ins_name);
end loop;
close mysys;
end;
/
或者,您可以声明具有两个字段的本地记录类型并将数据提取到其中
declare
mysys sys_refcursor;
-- I'm guessing at your data types here
type typ_my_rec is record (
ins_id integer,
ins_name varchar2(100)
);
rec typ_my_rec;
begin
reffunmani('MCA',mysys);
loop
fetch mysys into rec;
exit when mysys%notfound;
dbms_output.put_line(rec.ins_id||' '||rec.ins_name);
end loop;
close mysys;
end;
/