[日期: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
- droptableidb_varchar2;@H_404_54@
- createtableidb_varchar2@H_404_54@
- (id number,@H_404_54@
- namevarchar2(4000char));@H_404_54@
- insertintoidb_varchar2values(1,lpad('中',32767,'中'));@H_404_54@
- insertintoidb_varchar2values(2,lpad('a','b'));@H_404_54@
- commit;@H_404_54@
- selectid,lengthb(name),length(name)fromidb_varchar2;@H_404_54@
- droptableidb_varchar2;@H_404_54@
- createtableidb_varchar2@H_404_54@
- (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
- droptableidb_varchar2;@H_404_54@
- createtableidb_varchar2@H_404_54@
- (id number,@H_404_54@
- namevarchar2(4001));@H_404_54@
结果:
错误: ORA-00910: 指定的长度对于数据类型而言过长 |
超过4001会报错。
oracle plsql中varchar2最大支持长度示例
- setserveroutputon@H_404_54@
- declare@H_404_54@
- v_var varchar2(32767 byte);@H_404_54@
- v_char varchar2(32767char);@H_404_54@
- begin@H_404_54@
- v_var := lpad('a','a');@H_404_54@
- dbms_output.put_line(length(v_var));@H_404_54@
- v_char := lpad('中','中');@H_404_54@
- dbms_output.put_line(lengthb(v_var));@H_404_54@
- v_var := lpad('中',32768,'中');@H_404_54@
- end;@H_404_54@
- /@H_404_54@
- @H_404_54@
- @H_602_404@--定义如果超过32768会报错@H_404_54@
- declare@H_404_54@
- v_var varchar2(32768);@H_404_54@
- begin@H_404_54@
- null;@H_404_54@
- end;@H_404_54@
- /@H_404_54@
- setserveroutputon@H_404_54@
- declare@H_404_54@
- v_varvarchar2(32767byte);@H_404_54@
- v_charvarchar2(32767char);@H_404_54@
- begin@H_404_54@
- v_var:=lpad('a','a');@H_404_54@
- dbms_output.put_line(length(v_var));@H_404_54@
- v_char:=lpad('中','中');@H_404_54@
- dbms_output.put_line(lengthb(v_var));@H_404_54@
- v_var:=lpad('中','中');@H_404_54@
- end;@H_404_54@
- /@H_404_54@
- @H_404_54@
- @H_404_54@
- declare@H_404_54@
- v_varvarchar2(32768);@H_404_54@
- begin@H_404_54@
- null;@H_404_54@
- end;@H_404_54@
- /@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)