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

  1. drop table idb_varchar2;
  2. create table idb_varchar2
  3. (id number,
  4. name varchar2(4000 char));
  5. insert into idb_varchar2 values(1,lpad('中',32767,'中'));
  6. insert into idb_varchar2 values(2,lpad('a',32767,'b'));
  7. commit;
  8. select id,lengthb(name),length(name) from idb_varchar2;
drop table idb_varchar2;
create table idb_varchar2
(id number,
name varchar2(4000 char));
insert into idb_varchar2 values(1,lpad('中',32767,'中'));
insert into idb_varchar2 values(2,lpad('a',32767,'b'));
commit;
select id,lengthb(name),length(name) from idb_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

  1. drop table idb_varchar2;
  2. create table idb_varchar2
  3. (id number,
  4. name varchar2(4001));
drop table idb_varchar2;
create table idb_varchar2
(id number,
name varchar2(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最大支持长度示例

  1. set serveroutput on
  2. declare
  3. v_var varchar2(32767 byte);
  4. v_char varchar2(32767 char);
  5. begin
  6. v_var := lpad('a',32767,'a');
  7. dbms_output.put_line(length(v_var));
  8. v_char := lpad('中',32767,'中');
  9. dbms_output.put_line(lengthb(v_var));
  10. v_var := lpad('中',32768,'中');
  11. end;
  12. /
  13. --定义如果超过32768会报错
  14. declare
  15. v_var varchar2(32768);
  16. begin
  17. null;
  18. end;
  19. /
set serveroutput on
declare
  v_var varchar2(32767 byte);
  v_char varchar2(32767 char);
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)



转载请注明:本文来自iDB Stock:http://www.idb-stock.net/idb/2011/05/26/143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值