create or replace package p1 is
type mytype is
ref cursor;
procedure pro_p1(cur out mytype);
function fun_p1(str varchar2)
return varchar2;
end;create or replace package body p1 is
procedure pro_p1(cur out mytype) is
begin
open cur for select * from tb_role;
end pro_p1;
function fun_p1(str varchar2)
return varchar2
is
stem_str varchar2(200);
begin
stem_str := 'Good Luck!';
stem_str := stem_str || str;
return stem_str;
end fun_p1;
end p1;上面的包里面有个名为:pro_p1的过程.我在pl/sql developer工具里面想打印出过程输出游标的值:我尝试了2中方法:方法一:declare cur p1.mytype;
currow tb_role%rowtype;
begin
pro_getsamerole(cur);
if(cur%notfound) then
dbms_output.put_line('游标为空');
else
dbms_output.put_line('游标不为空');
loop fetch cur into currow;
exit when cur%notfound;
dbms_output.put_line(currow.id || currow.rolename);
end loop;
end if;
end;---此方法可行方法二:declare cur p1.mytype;
begin
pro_getsamerole(cur);
if(cur%notfound) then
dbms_output.put_line('游标为空');
else
dbms_output.put_line('游标不为空');
for cc in cur loop
dbms_output.put_line(cc.rolename);
end loop;
end if;
end;---此方法报错方法二报错:cur不是过程或者尚未定义.这个for循环怎么解决?求高人指点!
type mytype is
ref cursor;
procedure pro_p1(cur out mytype);
function fun_p1(str varchar2)
return varchar2;
end;create or replace package body p1 is
procedure pro_p1(cur out mytype) is
begin
open cur for select * from tb_role;
end pro_p1;
function fun_p1(str varchar2)
return varchar2
is
stem_str varchar2(200);
begin
stem_str := 'Good Luck!';
stem_str := stem_str || str;
return stem_str;
end fun_p1;
end p1;上面的包里面有个名为:pro_p1的过程.我在pl/sql developer工具里面想打印出过程输出游标的值:我尝试了2中方法:方法一:declare cur p1.mytype;
currow tb_role%rowtype;
begin
pro_getsamerole(cur);
if(cur%notfound) then
dbms_output.put_line('游标为空');
else
dbms_output.put_line('游标不为空');
loop fetch cur into currow;
exit when cur%notfound;
dbms_output.put_line(currow.id || currow.rolename);
end loop;
end if;
end;---此方法可行方法二:declare cur p1.mytype;
begin
pro_getsamerole(cur);
if(cur%notfound) then
dbms_output.put_line('游标为空');
else
dbms_output.put_line('游标不为空');
for cc in cur loop
dbms_output.put_line(cc.rolename);
end loop;
end if;
end;---此方法报错方法二报错:cur不是过程或者尚未定义.这个for循环怎么解决?求高人指点!
解决方案 »
- SQL性能优化(hint)
- 关于Oracle数据导入的问题...
- 那位大侠帮我提供一个子级OR的优化方案!
- 求救:同一台机器上的双系统XP 和 2000 PRO(2000 PRO已不能启动)之间ORACLE 9I的数据迁移问题!
- rownum,rowid的子查询问题
- oracle 数据表中数据分开???
- 高手请来讨论啊:开发中C#+orcal这样的搭配多吗,
- 一个具体应用问题,大家进来看看
- 不是因为难,而是不会!--- 帮忙解决一下!
- 查询两个数值之间所有值
- 散分,数据挖掘除了常用的select、update、delete之外还有哪些要了解的?
- 关于Developer/2000参数及参数表的问题
这种不能用在动态sql里。
比方说:cursor cur is select * from tb_role; 和 上面问题中的declare cur p1.mytype; pro_getsamerole(cur); 不都是 最终的执行结果都是"select * from tb_role;"
先在就是怎么用For循环能够取值.