开发中为了动态生成SQL语句(语句的内容是解析一个给定的表名,依次把这个表对应的列名拼接到一个SQL字符串中),定义好strsql varchar2(4000);用一个游标依次循环将对应的列名填入strsql中,tempsql:=colsnames;strsql:=strsql||tempsql;但总是会出现ora-06502错误,我调整了strsql的大小,没有用!请大虾们指点一二

解决方案 »

  1.   

    tempsql:=colsnames;strsql:=strsql||tempsql;是这样的呀!我的varchar2定义都到4000
      

  2.   

    因为是循环(次数和表对应的列数相关),所以tempsql:=colsnames;strsql:=strsql||tempsql执行了多次,会不会产生了过多的字符串,造成系统报错?
      

  3.   

    dbms_output.put_line(strsql);会不会是这条语句报错!
      

  4.   

    问题初步解决,就是dbms_output.put_line(strsql);作怪,屏蔽后调试通过,但原因我查了说10G的在这个没有限制,搞不懂!
      

  5.   

    ORA-06502 PL/SQL: numeric or value error stringCause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2).Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints.看看上面错误产生的原因.
      

  6.   

    谢谢dinya2003(OK)的提示,可是我屏蔽掉dbms_output.put_line(strsql);就能调试通过,一加上该语句就报错:主机绑定的数组大小有误,但是直接在execuate immediate(strsql)就没问题
      

  7.   

    dbms_output.put_line对输出长度是有限制的,近日一直被它困扰 -_-报什么错呢?一行限制255char?
      

  8.   

    我也有这个问题,使用的时候总是发现dbms_output.put_line对输出长度是有限制的,不能超过255
      

  9.   

    原来有长度限制,我主要是回现动态sQL语句
      

  10.   

    请问大家一般是如何回现长度很大的动态SQL语句,在程序调试中?
      

  11.   

    回 luoqianqian(狂龙) 自己写个printf函数,就是将字符串分割获取并output
      

  12.   

    回heyixiang(子豚の愛人):字符串分割获取没有任何问题,output用什么实现?
      

  13.   

    10g 里可以做如下设置, 
    set serveroutput on size UNLIMITED 就可以了