Varchar2定义一个变长字符串列的类型。当你创建一个varchar2类型的列时可以指定该列可以容纳的最长字节数或字符数。你必须指定一个最大长度,最少为1,虽然这个列的值可以为0长度的空字符。默认情况下,定义的长度是字节数,可以指定CHAR限定符来表示以字符数计算长度。Varchar2类型最长4000字节,比较的时候以自己字符实际长度去比较,不填充。
下面比较设置字节和字符长度的用法。
SQL> create table var_test(a varchar2(2));
Table created
SQL> create table var_test2(a varchar2(2 char));
Table created
SQL> insert into var_test values('中');
1 row inserted
SQL> insert into var_test values('中国');
insert into var_test values('中国')
ORA-12899: 列 "LHP"."VAR_TEST"."A" 的值太大 (实际值: 4, 最大值: 2)
SQL> insert into var_test2 values('中');
1 row inserted
SQL> insert into var_test2 values('中国');
1 row inserted
SQL>
Varchar2类型最长4000字节,虽然可以设置4000字符,但是实际只能存4000字节:
SQL> create table var_test3(a varchar2(4000));
Table created
SQL> insert into var_test3 values('中');
1 row inserted
SQL> commit;
Commit complete
SQL>
SQL> declare
2 v_char varchar2(100):='中';
3 v_num number;
4 begin
5 for r in 1..4001 loop
6 select length(a) into v_num from var_test3;
7 if v_num<4000 then
8 update var_test3 set a=a||v_char;
9 commit;
10 end if;
11 end loop ;
12
13 end;
14 /
declare
v_char varchar2(100):='中';
v_num number;
begin
for r in 1..4001 loop
select length(a) into v_num from var_test3;
if v_num<4000 then
update var_test3 set a=a||v_char;
commit;
end if;
end loop ;
end;
ORA-01489: 字符串连接的结果过长
ORA-06512: 在 line 8
SQL> select length(a) from var_test3;
LENGTH(A)
----------
2000
SQL> create table var_test4(a varchar2(4000 char));
Table created
SQL> insert into var_test4 values('中');
1 row inserted
SQL> commit;
Commit complete
SQL>
SQL> declare
2 v_char varchar2(100):='中';
3 v_num number;
4 begin
5 for r in 1..4001 loop
6 select length(a) into v_num from var_test4;
7 if v_num<4000 then
8 update var_test4 set a=a||v_char;
9 commit;
10 end if;
11 end loop ;
12
13 end;
14 /
declare
v_char varchar2(100):='中';
v_num number;
begin
for r in 1..4001 loop
select length(a) into v_num from var_test4;
if v_num<4000 then
update var_test4 set a=a||v_char;
commit;
end if;
end loop ;
end;
ORA-01489: 字符串连接的结果过长
ORA-06512: 在 line 8
SQL> select length(a) from var_test4;
LENGTH(A)
----------
2000
SQL> desc var_test4;
Name Type Nullable Default Comments
---- ------------------- -------- ------- --------
A VARCHAR2(4000 CHAR) Y
SQL> desc var_test3;
Name Type Nullable Default Comments
---- -------------- -------- ------- --------
A VARCHAR2(4000) Y
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/517786/viewspace-661560/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/517786/viewspace-661560/