ITPub博客

首页 > 数据库 > Oracle > ORA-01460的重现与解决(转载)

ORA-01460的重现与解决(转载)

原创 Oracle 作者:m77m78 时间:2007-06-07 17:30:31 0 删除 编辑
今天开发工程师说收到应用报ORA-01460错误,然后提交了报错的sql语句,该sql中用到了str2varlist函数,str2varlist有一个输入参数,该形参数据类型是varchar2,具体的创建语法请叁考链接,从sql看,语法没有问题,确定问题在实参上,如何重现该错误呢?示例代码如下:[@more@] 今天开发工程师说收到应用报ORA-01460错误,然后提交了报错的sql语句,该sql中用到了str2varlist函数,str2varlist有一个输入参数,该形参数据类型是varchar2,具体的创建语法请叁考链接,从sql看,语法没有问题,确定问题在实参上,如何重现该错误呢?示例代码如下:
15:26:44 SQL> declare
15:28:38 2 v_n1 varchar2(5000);
15:28:38 3 v_n2 varchar2(5000);
15:28:38 4 v_n varchar2(20000);
15:28:38 5 v_cnt number;
15:28:38 6 begin
15:28:38 7 v_n1 := rpad('a',2001,'*');
15:28:38 8 v_n2 := rpad('a',2001,'*');
15:28:38 9 v_n := v_n1||','||v_n2; --这个地方v_n长度是4003,执行是没有问题的,符合plsql运算规范15:28:38 10
15:28:38 11 select count(*) into v_cnt15:28:38 12 from table(str2varlist(v_n));
15:28:38 13 dbms_output.put_line(v_n);
15:28:38 14 end;
15:28:39 15 /
declare
*
ERROR at line 1:
ORA-01460: unimplemented or unreasonable conversion requested
ORA-06512: at line 11

15:28:40 SQL> declare
15:28:53 2 v_n1 varchar2(10000);
15:28:53 3 v_n2 varchar2(10000);
15:28:53 4 v_n varchar2(30000);
15:28:53 5 v_cnt number;
15:28:53 6 begin
15:28:53 7 v_n1 := rpad('a',1001,'*');
15:28:53 8 v_n2 := rpad('a',1001,'*');
15:28:53 9 v_n := v_n1||','||v_n2;
15:28:53 10
15:28:53 11 select count(*) into v_cnt
15:28:53 12 from table(str2varlist(v_n));
15:28:53 13 dbms_output.put_line(v_n);
15:28:53 14 end;
15:28:53 15 /
PL/SQL procedure successfully completed.

  根据测试,发现这是一个常识性的错误,即函数的varchar2类型的实参长度是不能超过4000的,不仅自定义的函数有这个限制,系统内置函数也有4000这个限制的,比如: SQL>select length(rpad('a',4001,'*')) from dual;
LENGTH(RPAD('A',4001,'*'))
--------------------------
4000

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

请登录后发表评论 登录
全部评论

注册时间:2008-04-25

  • 博文量
    168
  • 访问量
    764658