li
  当前位置:主页 > 性能优化 > 文章内容
li
ORA-01460的解决方法
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2008-03-14   阅读:12  

     今天开发工程师说收到应用报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




  上一篇: ORA-29516 Aurora assertion fai...   下一篇: ORA-01599: failed to acquire r...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·ORA-29516 Aurora assertion fai...
·ORA-25153: 临时表空间为空
·oracle中ora-0100错误打开游标过...
·oracle ORA-01991错误--重建密码...
·ORA-00904 invalid column name案...
·oracle ora-01861文字与格式字符...
·ORACLE ORA-1693错误以及表和索...
·ORA-00701 warmstarting对象的另...
·ORA-600 [2103]错误解决过程
·ORA-04098错误解决方法
·ORA-01599: failed to acquire r...
·如何解决Ora-600 4193错误
·ORA-01502错误成因和解决方法
·ORA-00903 invalid table name
·Oracle ORA-00257故障解决办法
·ORA-00604 error occurred at re...
·清除Oracle中无用索引,改善DML性...
·ORA-04031错误解决方法(unable t...
·ORA-1122错误的解决办法
·ORA-07445: exception encounter...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接