Welcome 微信登录

首页 / 数据库 / MySQL / 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(namefrom idb_varchar2;
 
  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;  
输出结果:
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));
 
  1. drop table idb_varchar2;  
  2. create table idb_varchar2  
  3. (id number,  
  4. 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. /
 
  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.   
  14. --定义如果超过32768会报错   
  15. declare  
  16.   v_var varchar2(32768);  
  17. begin  
  18.   null;  
  19. end;  
  20. /  
输出结果:dw@dw>set serveroutput ondw@dw>declare2v_var varchar2(32767 byte);3v_char varchar2(32767 char);4begin5v_var := lpad("a",32767,"a");6dbms_output.put_line(length(v_var));7v_char := lpad("中",32767,"中");8dbms_output.put_line(lengthb(v_var));9v_var := lpad("中",32768,"中"); 10end; 11/3276732767declare*第 1 行出现错误:ORA-06502: PL/SQL: 数字或值错误 :字符串缓冲区太小ORA-06512: 在 line 9dw@dw>dw@dw>declare2v_var varchar2(32768);3begin4null;5end;6/v_var varchar2(32768); *第 2 行出现错误:ORA-06550: 第 2 行, 第 18 列:PLS-00215: 字符串长度限制在范围 (1...32767)Oracle 创建create user 及授权grantMySQL出现大量locked进程的解决相关资讯      oracle数据库教程 
  • Oracle raw数据类型介绍  (01/29/2013 10:05:53)
  • 监听器注册与ORA-12514 错误分析  (11/13/2012 14:30:08)
  • Oracle SQL的cursor理解  (11/13/2012 14:16:17)
  • Oracle 如何强制刷新Buffer Cache  (01/29/2013 10:02:46)
  • dblink致Oracle库的SCN变成两库的  (11/13/2012 14:24:41)
  • Linux操作系统下完全删除Oracle数  (11/13/2012 08:25:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数