可以加大缓冲区设置,在Oracled的(ini)配置文件中设置

解决方案 »

  1.   

    是不是varchar和varchar2转换时候出的问题?
      

  2.   

    把缓冲区设置大些;
    另外,是不是你用于存放动态sql串的变量的长度不够啊,
    否则就会报“数字或值错误”,我也遇到过。
      

  3.   

    长度够了,
    这个串有1200个字符,我定义成string(2000),varchar2(2000),varchar2(5000)都不行,报一样的错误。
    同样的语句,短字符串就可以,所以也不是类型转换的问题。
    是不是服务器有可以设置字符串缓冲区大小的地方?
      

  4.   

    ----同样的语句,短字符串就可以,所以也不是类型转换的问题。
    这个问题应该出现你的sql 语句上,我碰到过很多次。
    你调试一下就知道了
      

  5.   

    TO hushuangyang(hushuangyang) :
    不是语句的问题,我是作了一个N次的循环拼成了个Insert 语句,无论循环次数多少这个语句的形式都是一样的。
      

  6.   

    我遇到的也是这样,把varchar2(长度) 长度值改大,足够的字符串长
      

  7.   

    v_XmbhList:='';
      v_XmbhSumList:='';
      for v_i in 1..100 loop 
        if v_i>=10 then
           v_xmbh:='XM'||to_char(v_i);
        else
           v_xmbh:='XM'||'0'||to_char(v_i);
        end if;
        v_XmbhList:=v_XmbhList||' , '||v_xmbh;
        v_XmbhSumList:=v_XmbhSumList||' ,(A.SUM('||v_xmbh||')';   
        
      end loop; 
     
      dbms_output.put(v_xmbhsumlist); --执行这一句就会报错,如果把这一句注掉,那么下一句就会报错!报相同的错误。
      
      v_sql:=' insert into t_yjjljghz (jgbh,dwmc,hznd '||v_XmbhList||')  '
                  ||'   select B.jgbh,C.jgmc,'''||v_HZND||''''||v_XmbhSumList||'  from t_gryjjlhz A,t_ygjbxx B ,t_jg C'
                  ||' where A.ygid=B.ygid and b.jgbh=c.jgbh and A.hznd='''||v_HZND||''' group by B.jgbh,c.jgmc ';
     
      DBMS_OUTPUT.PUT(v_sql);
      execute immediate v_sql;
      

  8.   

    dbms_output.put 函数只能输出最多255个字符的字符串,你的字符串超长了
      

  9.   

    楼上的,你说的是DBMS_OUTPUT.PUT_LINE吧!
    下面一句做字符串连接的也报错呀!
      

  10.   

    declare 
      i integer;
      v_sql varchar2(10000);
      v_Xmbh varchar2(10000);
      v_XmbhList varchar2(10000);
      v_XmbhsumList varchar2(10000);
    begin
      v_XmbhList:='';
      v_XmbhSumList:='';
      for v_i in 1..100 loop 
        if v_i>=10 then
           v_xmbh:='XM'||to_char(v_i);
        else
           v_xmbh:='XM'||'0'||to_char(v_i);
        end if;
        v_XmbhList:=v_XmbhList||' , '||v_xmbh;
        v_XmbhSumList:=v_XmbhSumList||' ,(A.SUM('||v_xmbh||')';   
        
      end loop; 
     
      --dbms_output.put(v_xmbhsumlist); --执行这一句就会报错,如果把这一句注掉,那么下一句就会报错!报相同的错误。
      
      v_sql:=' insert into t_yjjljghz (jgbh,dwmc,hznd '||v_XmbhList||')  '
                  ||'   select B.jgbh,C.jgmc,'''||222||''''||v_XmbhSumList||'  from t_gryjjlhz A,t_ygjbxx B ,t_jg C'
                  ||' where A.ygid=B.ygid and b.jgbh=c.jgbh and A.hznd='''||222||''' group by B.jgbh,c.jgmc ';
     
      --DBMS_OUTPUT.PUT(v_sql);  --注释掉
      --execute immediate v_sql;  
    end;--上面的语句执行没有任何错误,可见是DBMS_OUTPUT.PUT函数的问题
      

  11.   

    v_sql:=' insert into t_yjjljghz (jgbh,dwmc,hznd '||v_XmbhList||')  '
                  ||'   select B.jgbh,C.jgmc,'''||222||''''||v_XmbhSumList||'  from t_gryjjlhz A,t_ygjbxx B ,t_jg C'
                  ||' where A.ygid=B.ygid and b.jgbh=c.jgbh and A.hznd='''||222||''' group by B.jgbh,c.jgmc ';
    把这一句output出来在sqlplus中提交,好象有问题?
      

  12.   

    这些都是一些小细节的问题,你不必要问我,你代码出错的关键就是
    dbms_output.put函数对输出字符串的长度的限制
      

  13.   

    dbms_output.put_line 好象是有长度限制
      

  14.   

    谢谢各位大侠!dbms_output.put 只是我调试用的代码,它是有长度限制,可是这一句:  v_sql:=' insert into t_yjjljghz (jgbh,dwmc,hznd '||v_XmbhList||')  '
                  ||'   select B.jgbh,C.jgmc,'''||222||''''||v_XmbhSumList||'  from t_gryjjlhz A,t_ygjbxx B ,t_jg C'
                  ||' where A.ygid=B.ygid and b.jgbh=c.jgbh and A.hznd='''||222||''' group by B.jgbh,c.jgmc ';这一句我只是做了一个字符串连接,为什么会报错?
    如果XmbhSumList短一些的话就不会报错。
    我拼成的这个SQL有没问题另当别论,因为我还没有执行这个Sql!
     
      

  15.   

    ORA-06502: PL/SQL: 数字或值错误,字符串缓冲区太小
    是因为dbms_output.put的参数超长抱的.v_xmbhsumlist拼的也有问题(一下是其中一段,显然是错误的):
    ,(A.SUM(XM01) ,(A.SUM(XM02) ,(A.SUM(XM03) ,(A.SUM(XM04) ,(A.SUM(XM05)
    ,(A.SUM(XM06) ,(A.SUM(XM07) ,(A.SUM(XM08) ,(A.SUM(XM09) ,(A.SUM(XM10)
    ,(A.SUM(XM11) ,(A.SUM(XM12)
      

  16.   

    靠,原来是v_sql的长度定义的太小了,老想着在v_xmbhsumlist身上找问题,没想到问题出在v_sql上。楼上各位说得都对,真是谢谢了!给分,给分!!!