首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

【请问】前辈们,关于引用游标的一个小疑点

2013-07-11 
【请教】前辈们,关于引用游标的一个小问题今天学到了游标,有道题老是报“ORA-06550 必须声明组件错误。”刚接触

【请教】前辈们,关于引用游标的一个小问题
今天学到了游标,有道题老是报“ORA-06550 必须声明组件错误。”【请问】前辈们,关于引用游标的一个小疑点
刚接触Oracle,还请前辈们不吝赐教啊~

题目:使用引用游标查询EMP表,随着外界传入的字段列表不同,输出不同的查询结果。
要求输入三个不同字段;

我的做法:


麻烦帮忙看看错哪里吧,先谢谢了~
[解决办法]
换种方式写一下
declare    type newcur is ref cursor;
mycur newcur;     cmd1 varchar2(10);
cmd2 varchar2(10);
cmd3 varchar2(10);
--curRow  emp%rowtype;
c1 varchar2(100);
c2 varchar2(100);
c3 varchar2(100);
sql1 varchar(200); begin
cmd1 :='&字段1';     cmd2 :='&字段2';     cmd3 :='&字段3';
--sql1 := 'select ' 
[解决办法]
 cmd1 
[解决办法]
' as c1,' 
------解决方案--------------------


 cmd2 
[解决办法]
' as  c2,' 
[解决办法]
 cmd3 
[解决办法]
' as c3 from emp';
sql1 := 'select ' 
[解决办法]
 cmd1 
[解决办法]
' ,' 
[解决办法]
 cmd2 
[解决办法]
',' 
[解决办法]
 cmd3 
[解决办法]
' from emp';
dbms_output.put_line( 'sql1='
[解决办法]
sql1);
open mycur for sql1;
loop
fetch  mycur into c1,c2,c3;
dbms_output.put_line(c1 
[解决办法]
'  '
[解决办法]
c2
[解决办法]
'  '
[解决办法]
c3);exit when mycur%notfound;
end loop;
close mycur;end;
/
[解决办法]

引用:
换种方式写一下
declare    type newcur is ref cursor;
mycur newcur;     cmd1 varchar2(10);
cmd2 varchar2(10);
cmd3 varchar2(10);
--curRow  emp%rowtype;
c1 varchar2(100);
c2 varchar2(100);
c3 varchar2(100);
sql1 varchar(200); begin
cmd1 :='&字段1';     cmd2 :='&字段2';     cmd3 :='&字段3';
--sql1 := 'select ' 
[解决办法]
 cmd1 
[解决办法]
' as c1,' 

[解决办法]
 cmd2 
[解决办法]
' as  c2,' 
[解决办法]
 cmd3 
[解决办法]
' as c3 from emp';
sql1 := 'select ' 
[解决办法]
 cmd1 
[解决办法]
' ,' 
[解决办法]
 cmd2 
[解决办法]
',' 
[解决办法]
 cmd3 
[解决办法]
' from emp';
dbms_output.put_line( 'sql1='
[解决办法]
sql1);
open mycur for sql1;
loop
fetch  mycur into c1,c2,c3;
dbms_output.put_line(c1 
[解决办法]
'  '
[解决办法]
c2
[解决办法]
'  '
[解决办法]
c3);exit when mycur%notfound;
end loop;
close mycur;end;
/



Good Job!

动态sql游标,Oracle并不能预知sql的传出值会有几个。
LS用的FETCH XXX INTO C1,C2,C3,等于告诉Oracle上面的动态SQL是有三个传出参数。

热点排行
Bad Request.