create or replace procedure sp_test(strInput in varchar2 ,strOutput out varchar2 ) is
i int ; 
begin
         
for i in 1..2000 loop
strOutput:=strOutput || 'a' ; 
end loop;end sp_test;当strOutput的长度太长时就会报错。
可否通过改变它的类型或其它方法来尽可能加大它的长度呢?

解决方案 »

  1.   

    varchar2只支持4000的长度,用clob或其他
      

  2.   

    strOutput 的长度大于等于2000时就出错,而不是4000。
      

  3.   

    You use the VARCHAR2 datatype to store variable-length character data. How the data is represented internally depends on the database character set. The VARCHAR2 datatype takes a required parameter that specifies a maximum size up to 32767 bytes.
      

  4.   

    上面是来自PL/SQL User's Guide and Reference(Release 2 (9.2) Part Number A96624-01)中的描述。你那个过程是怎么调用的,是另一个存储过程还是在sql块中?是否是调用者定义的长度太小了?
      

  5.   

    我试过两种方法调用该存储过程时都会出现字节串长度过长的错误, 
    一个是远程客户端通过ADO调用, 另一个是直接通过PL/SQL的TEST调试菜单来调用。
      

  6.   

    你在sqlplus中测试看看吧。我测试是可以的。
    SQL> create or replace procedure sp_test(strInput in varchar2 ,strOutput in out varchar2 ) is
      2  i int ;
      3  begin
      4    for i in 1..2000 loop
      5    strOutput:=strOutput || 'a' ;
      6    end loop;
      7  end sp_test;
      8  /过程已创建。SQL>
    SQL> var s1 varchar2(4000)
    SQL> set serveroutput on
    SQL> declare
      2    s varchar2(8000);
      3  begin
      4    sp_test('11',s);
      5    dbms_output.put_line(lengthb(s));
      6    :s1 := s;
      7  end;
      8  /
    2000PL/SQL 过程已成功完成。SQL> select lengthb(:s1) from dual;LENGTHB(:S1)
    ------------
            2000