错误00932_ORA-00932: inconsistent datatypes: expected - got -

早上帮一群友调试一个过程,开始报错如下:

让他提供了代码,大致看了一遍,简单模拟一下:

SQL> drop table goolen;

Table dropped.

SQL> create table goolen as select object_id id,object_name name from dba_objects where rownum <=10;

Table created.

原始代码改写后执行如下:

SQL> declare

2  type cur_type1 is ref cursor;

3  cur_policy cur_type1;

4  temp varchar2(2000);

5  temp2 varchar2(2000);

6  al varchar2(2000);

7  begin

8  al:='';

9    temp := 'select * from goolen';

10    open cur_policy for temp;

11    loop

12    fetch cur_policy into temp2;

13    exit when cur_policy%notfound;

14    al:=al||','||temp2;

15    close cur_policy;

16  end loop;

17  dbms_output.put_line(al);

18  end;

19  /

declare

*

ERROR at line 1:

ORA-00932: inconsistent datatypes: expected - got -

ORA-06512: at line 12

报错ORA-00932,其实导致这个错误的原因很简单

goolen有id,name两列,但是fetch into的时候只指定了temp2,所以报错了

查看这段代码,其实存在两个问题,首先改第一个错误

SQL> declare

2  type cur_type1 is ref cursor;

3  cur_policy cur_type1;

4  temp varchar2(2000);

5  v_id number;

6  temp2 varchar2(2000);

7  al varchar2(2000);

8  begin

9  al:='';

10    temp := 'select * from goolen';

11    open cur_policy for temp;

12    loop

13    fetch cur_policy into v_id,temp2;

14    exit when cur_policy%notfound;

15    al:=al||','||temp2;

16    close cur_policy;

17  end loop;

18  dbms_output.put_line(al);

19  end;

20  /

declare

*

ERROR at line 1:

ORA-01001: invalid cursor

ORA-06512: at line 13改完后不再报ORA-00932错误,而是报了另外一个错误ORA-01001;

其实这个错误是因为语法错误导致的,在loop循环里,close游标这一步放到了end loop之前

更改后再次执行:

SQL> declare

2  type cur_type1 is ref cursor;

3  cur_policy cur_type1;

4  temp varchar2(2000);

5  v_id number;

6  temp2 varchar2(2000);

7  al varchar2(2000);

8  begin

9  al:='';

10    temp := 'select * from goolen';

11    open cur_policy for temp;

12    loop

13    fetch cur_policy into v_id,temp2;

14    exit when cur_policy%notfound;

15    al:=al||','||temp2;

16  end loop;

17  close cur_policy;

18  dbms_output.put_line(al);

19  end;

20  /

,ICOL$,I_USER1,CON$,UNDO$,C_COBJ#,I_OBJ#,PROXY_ROLE_DATA$,I_IND1,I_CDEF2,I_PROXY

_ROLE_DATA$_1

PL/SQL procedure successfully completed.

已经OK了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23249684/viewspace-1408988/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值