Varchar2类型的定义

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值