在PLSQL中,存储过程的输出参数最大支持多大

 我来答
神话梦碎
2017-06-26 · TA获得超过8797个赞
知道大有可为答主
回答量:6699
采纳率:0%
帮助的人:3157万
展开全部
在PLSQL中,存储过程的输出参数(varchar2)最大支持多大?
用的数据库是 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 codeSQL> 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 过程已成功完成。
介蛟龙i
2017-06-26 · TA获得超过293个赞
知道小有建树答主
回答量:171
采纳率:60%
帮助的人:26.2万
展开全部
你好,动态分配的,有多大占多大希望回答对您有帮助.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式