Oracle varchar2最大支持长度

Oracle varchar2最大支持长度

[日期:2012-03-06] 来源:Linux社区 作者:Linux [字体:]

网上经常有人问Oraclevarchar2最大支持长度为多少?其实这个叫法不太准确,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. droptableidb_varchar2;@H_404_54@
  2. createtableidb_varchar2@H_404_54@
  3. (id number,@H_404_54@
  4. namevarchar2(4000char));@H_404_54@
  5. insertintoidb_varchar2values(1,lpad('中',32767,'中'));@H_404_54@
  6. insertintoidb_varchar2values(2,lpad('a','b'));@H_404_54@
  7. commit;@H_404_54@
  8. selectid,lengthb(name),length(name)fromidb_varchar2;@H_404_54@
  1. droptableidb_varchar2;@H_404_54@
  2. createtableidb_varchar2@H_404_54@
  3. (idnumber,length(name)fromidb_varchar2;@H_404_54@

输出结果:

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('中','中')); 已创建 1 行。 dw@dw>insert into idb_varchar2 values(2,lpad('a','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. droptableidb_varchar2;@H_404_54@
  2. createtableidb_varchar2@H_404_54@
  3. (id number,@H_404_54@
  4. namevarchar2(4001));@H_404_54@
404_54@
  • namevarchar2(4001));@H_404_54@
  • 结果:

    错误: ORA-00910: 指定的长度对于数据类型而言过长

    超过4001会报错。

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

    1. setserveroutputon@H_404_54@
    2. declare@H_404_54@
    3. v_var varchar2(32767 byte);@H_404_54@
    4. v_char varchar2(32767char);@H_404_54@
    5. begin@H_404_54@
    6. v_var := lpad('a','a');@H_404_54@
    7. dbms_output.put_line(length(v_var));@H_404_54@
    8. v_char := lpad('中','中');@H_404_54@
    9. dbms_output.put_line(lengthb(v_var));@H_404_54@
    10. v_var := lpad('中',32768,'中');@H_404_54@
    11. end;@H_404_54@
    12. /@H_404_54@
    13. @H_404_54@
    14. @H_602_404@--定义如果超过32768会报错@H_404_54@
    15. declare@H_404_54@
    16. v_var varchar2(32768);@H_404_54@
    17. begin@H_404_54@
    18. null;@H_404_54@
    19. end;@H_404_54@
    20. /@H_404_54@
    1. setserveroutputon@H_404_54@
    2. declare@H_404_54@
    3. v_varvarchar2(32767byte);@H_404_54@
    4. v_charvarchar2(32767char);@H_404_54@
    5. begin@H_404_54@
    6. v_var:=lpad('a','a');@H_404_54@
    7. dbms_output.put_line(length(v_var));@H_404_54@
    8. v_char:=lpad('中','中');@H_404_54@
    9. dbms_output.put_line(lengthb(v_var));@H_404_54@
    10. v_var:=lpad('中','中');@H_404_54@
    11. end;@H_404_54@
    12. /@H_404_54@
    13. @H_404_54@
    14. @H_602_404@--定义如果超过32768会报错@H_404_54@
    15. declare@H_404_54@
    16. v_varvarchar2(32768);@H_404_54@
    17. begin@H_404_54@
    18. null;@H_404_54@
    19. end;@H_404_54@
    20. /@H_404_54@

    输出结果:

    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','a');
      6    dbms_output.put_line(length(v_var));
      7    v_char := lpad('中','中');
      8    dbms_output.put_line(lengthb(v_var));
      9    v_var := lpad('中','中');
     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)

    相关文章

    数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
    (一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
    (一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
    (1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
    RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
    (1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...