用的数据库是 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最大支持长度能修改吗?
------解决方案--------------------
最大支持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;
------解决方案--------------------
你是不是在DECLARE变量的时候,只定义了2000的长度。最长可以是4000
------解决方案--------------------
存储过程中varchar2类型的变量,最大长度可以达到缓冲区的最大长度,即32767
而对于字段来说varchar2类型的最大长度是4000
例:
- SQL code
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 过程已成功完成。