CREATE OR REPLACE PROCEDURE TEST
(param  IN OUT NOCOPY string ) AS
  c varchar2(20000);
BEGIN
  
  
  for i in 1..201 loop
    c:=c||'a';
  end loop;
  
  param:=c;
  
END;
如上代码,如果输出为200字符的话则可以正确输出,
若是201个则会出现ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小.在pl/sql 里面 varchar2不是32767吗?! 这怎么这么小呀?!哪位高手知道怎么设置吗?

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE TEST (
    param  IN OUT NOCOPY string 
    ) AS
    c varchar2(32000);
    BEGIN
      for i in 1..20100 loop
        c:=c||'a';
      end loop;
      
      param:=c;
    END;
    /
    DECLARE
    vs_param varchar2(32000);
    begin
    vs_param :='123';
      -- Call the procedure
      test(param => vs_param );
    dbms_output.put_line( length( vs_param) );
    -- 20100
    end;
    /
    没有问题
      

  2.   

    楼上的。 不好用呀。 OUT 的varchar2, String  类型的参数 最长不超过200个字符.我在9iR2 10gR2 上面运行测试都一样。