日期:2014-05-17  浏览次数:21165 次

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

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

我的做法:

declare
    type newcur is ref cursor;
    mycur newcur;
    cmd1 varchar2(10);
    cmd2 varchar2(10);
    cmd3 varchar2(10);
    curRow  emp%rowtype;
    sql1 varchar(200);
begin
    cmd1 :='&字段1';
    cmd2 :='&字段2';
    cmd3 :='&字段3';
    sql1 := 'select ' || cmd1 ||' as c1,' || cmd2 ||' as  c2,' || cmd3 ||' as c3 from emp';

    open mycur for sql1;
    loop
       fetch  mycur into curRow;
       exit when mycur%notfound;
       dbms_output.put_line(curRow.c1 ||'  '||curRow.c2||'  '||curRow.c3);
    end loop;
end;


可总提示第19行的c1必须声明,不知道哪里错了,
麻烦帮忙看看错哪里吧,先谢谢了~

------解决方案--------------------
换种方式写一下
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,' 
------解决方案--------------------