在本教程中将学习oracle varchar2
数据类型以及如何使用它来定义可变长度的字符串列。
要存储可变长度的字符串,可以使用oracle varchar2
数据类型。 varchar2
列可以存储1
到4000
字节的值。 这意味着对于单字节字符集,最多可以在varchar2
列中存储4000
个字符。
当使用varchar2
列创建表时,必须指定最大字符串长度(以字节为单位):
varchar2(max_size byte)
或以字符 -
varchar2(max_size char)
默认情况下,如果没有在max_size
之后显式指定byte
或char
,则oracle使用byte
。 换句话说,varchar2(n)
列最多可以容纳n
个字节的字符。
如果存储大小超过varchar2
列最大长度的字符串,则oracle发出错误。
例如,如果定义最大长度为20
的varchar2
列,则在单字节字符集中最多可以存储20
个字符。 如果存储了21
个或更多字符,则oracle返回错误。
另外,如果在varchar2(20)
列中存储10
个字符,则oracle仅使用10
个字节进行存储,而不是20
个字节。 因此,使用varchar2
数据类型可以帮助您节省表使用的空间。
比较varchar2
值时,oracle使用非填充比较语义。
从oracle 12c开始,可以为varchar2
数据类型最大长度为:32767
。 oracle使用max_string_size
参数来控制最大长度。 如果max_string_size
是standard
,则varchar2
的最大大小是4000
字节。 如果max_string_size
为extended
,则varchar2
的大小限制为32767
。
要获取max_string_size
参数的值,请使用以下查询:
select
name,
value
from
v$parameter
where
name = 'max_string_size';
执行上面查询语句,得到以下结果 -
show parameter max_string_size;
以下语句创建一个名为econtacts
的新表来存储员工的紧急联系人 -
create table econtacts (
econtact_id number generated by default as identity primary key,
employee_id number not null,
first_name varchar( 20 ) not null,
last_name varchar( 20 ) not null,
phone varchar( 12 ) not null,
foreign key( employee_id ) references employees( employee_id )
on delete cascade
);
econtacts
表有三个varchar2
列:first_name
,last_name
和phone
。
以下语句将新行插入到econtacts
表中:
insert
into
econtacts(
employee_id,
first_name,
last_name,
phone
)
values(
1,
'branden',
'wiley',
'202-555-0193'
);
它按预期工作,因为输入数据不会超过varchar2
列的最大长度。
但是,以下语句未能成功插入:
insert
into
econtacts(
employee_id,
first_name,
last_name,
phone
)
values(
10,
'pablo diego jose francisco',
'gray',
'202-555-0195'
);
由于输入名字超过了first_name
列的最大长度,oracle发出以下错误:
sql error: ora-12899: value too large for column "ot"."econtacts"."first_name" (actual: 26, maximum: 20)
在本教程中,您已经了解了oracle varchar2
以及如何使用varchar2
数据类型在表中定义可变长度字符串列。