oracle变量最大多少位,Oracle varchar2最大支持长度

网上经常有人问Oracle varchar2最大支持长度为多少?其实这个叫法不太准确,varchar2分别在oracle的sql和pl/sql中都有使用,oracle 在sql参考手册和pl/sql参考手册中指出:oracle sql varchar2的最大支持长度为4000个字节(bytes);而 oracle plsql varchar2最大支持长度为32767个字节。这就是有朋友问,在pl/sql中定义了32767个(字符/字节),为什么在表的字段中不能定义大于4000个字节的原因了。

下面分别给出varchar2在oracle sql和plsql中最大长度的示例。

oracle sql中varchar2最大支持长度示例–最大长度为4000

droptableidb_varchar2;

createtableidb_varchar2

(id number,

namevarchar2(4000char));

insertintoidb_varchar2values(1,lpad('中',32767,'中'));

insertintoidb_varchar2values(2,lpad('a',32767,'b'));

commit;

selectid,lengthb(name),length(name)fromidb_varchar2;

droptableidb_varchar2;

createtableidb_varchar2

(id number,

namevarchar2(4000char));

insertintoidb_varchar2values(1,lpad('中',32767,'中'));

insertintoidb_varchar2values(2,lpad('a',32767,'b'));

commit;

selectid,lengthb(name),length(name)fromidb_varchar2;

输出结果:

dw@dw>drop table idb_varchar2; 表已删除。 dw@dw>create table idb_varchar2 2 (id number, 3 name varchar2(4000 char)); 表已创建。 dw@dw>insert into idb_varchar2 values(1,lpad('中',32767,'中')); 已创建 1 行。 dw@dw>insert into idb_varchar2 values(2,lpad('a',32767,'b')); 已创建 1 行。 dw@dw>commit; 提交完成。 dw@dw>select id,lengthb(name),length(name) from idb_varchar2; ID LENGTHB(NAME) LENGTH(NAME) ---------- ------------- ------------ 1 4000 2000 2 4000 4000 已选择2行。

oracle sql中varchar2最大支持长度示例–设计长度为4001

droptableidb_varchar2;

createtableidb_varchar2

(id number,

namevarchar2(4001));

droptableidb_varchar2;

createtableidb_varchar2

(id number,

namevarchar2(4001));

结果:

dw@dw>drop table idb_varchar2; 表已删除。 dw@dw>create table idb_varchar2 2 (id number, 3 name varchar2(4001)); name varchar2(4001)) * 第 3 行出现错误: ORA-00910: 指定的长度对于数据类型而言过长

超过4001会报错。

oracle plsql中varchar2最大支持长度示例

setserveroutputon

declare

v_var varchar2(32767 byte);

v_char varchar2(32767char);

begin

v_var := lpad('a',32767,'a');

dbms_output.put_line(length(v_var));

v_char := lpad('中',32767,'中');

dbms_output.put_line(lengthb(v_var));

v_var := lpad('中',32768,'中');

end;

/

--定义如果超过32768会报错

declare

v_var varchar2(32768);

begin

null;

end;

/

setserveroutputon

declare

v_var varchar2(32767 byte);

v_char varchar2(32767char);

begin

v_var := lpad('a',32767,'a');

dbms_output.put_line(length(v_var));

v_char := lpad('中',32767,'中');

dbms_output.put_line(lengthb(v_var));

v_var := lpad('中',32768,'中');

end;

/

--定义如果超过32768会报错

declare

v_var varchar2(32768);

begin

null;

end;

/

输出结果:dw@dw>set serveroutput on

dw@dw>declare

2 v_var varchar2(32767 byte);

3 v_char varchar2(32767 char);

4 begin

5 v_var := lpad('a',32767,'a');

6 dbms_output.put_line(length(v_var));

7 v_char := lpad('中',32767,'中');

8 dbms_output.put_line(lengthb(v_var));

9 v_var := lpad('中',32768,'中');

10 end;

11 /

32767

32767

declare

*

第 1 行出现错误:

ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

ORA-06512: 在 line 9

dw@dw>

dw@dw>declare

2 v_var varchar2(32768);

3 begin

4 null;

5 end;

6 /

v_var varchar2(32768);

*

第 2 行出现错误:

ORA-06550: 第 2 行, 第 18 列:

PLS-00215: 字符串长度限制在范围 (1...32767)0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值