用的数据库是 oracle 10.2. , PLSQL 7.1 。 我自己做了个测试
create or replace procedure te1(ResBuff out Varchar2) is
begin
   ResBuff := LPAD('a',2001,'b');
end ;执行结果报错:
ORA-06502:PL/SQL:number or value error:character string buffer too small
长度2000的时候正常,配置默认的NLS_LANGUAGE = AMERICAN;NLS_CHARACTERSET = ZHS16GBK;补充,这个输出参数Varchar2最大支持长度能修改吗?

解决方案 »

  1.   


    最大支持4000,我完全没发现你说的问题
    create or replace procedure te1(ResBuff out Varchar2) is
    begin
      ResBuff := LPAD('a',2001,'b');
    end ;
    DECLARE
    a varchar2(3000);
    BEGIN
    te1(a);
    dbms_output.put_line(a);
    END;
      

  2.   

    你是不是在DECLARE变量的时候,只定义了2000的长度。最长可以是4000
      

  3.   

    存储过程中varchar2类型的变量,最大长度可以达到缓冲区的最大长度,即32767
    而对于字段来说varchar2类型的最大长度是4000
    例:SQL> create or replace procedure testproc(
      2  p_len int,
      3  p_var out varchar2)
      4  is
      5  begin
      6    p_var := lpad('a',p_len,'b');
      7  end ;
      8  /过程已创建。SQL> declare
      2      v_var varchar2(32767);
      3      v_len int := 32767;
      4  begin
      5      testproc (v_len,v_var);
      6      dbms_output.put_line(length(v_var));
      7  end;
      8  /
    32767                                                                           PL/SQL 过程已成功完成。
      

  4.   

    我是在PL/SQL 工具直接右键存储过程,test 的, 应该是工具默认了out varchar2类型变量为2000个字节。
      

  5.   

    http://download.csdn.net/download/xcx2010331/4165859
    参考这个