1:char 和 varchar2的区别: varchar2 :variable-length 变长 char : fixed-length 固定长度 char定义的时候分配内存,而va
1:char 和 varchar2的区别:
varchar2 :variable-length 变长
char : fixed-length 固定长度
char定义的时候分配内存,而varchar2动态分配内存
下面一个例子明确的说明了这两个的区别 :
sql> declare
2 c char(32767) := ' ';
3 v varchar2(32767) := ' ';
4 begin
5 dbms_output.put_line('c is ['||length(c)||']');
6 dbms_output.put_line('v is ['||length(v)||']');
7 v := v || ' ';
8 dbms_output.put_line('v is ['||length(v)||']'); end;
9 /
c is [32767]
v is [1]
v is [2]
pl/sql 过程已成功完成。
输出的结果显示:char类型变量在定义的时候分配内存,分配的内存也可能超过变量定义的大小,varchar2类型变量动态分配内存,根据设置的变量的大小。
下面的例子也说明这一点:
sql> declare
2 c char(32767) := ' ';
3 v varchar2(32767) := ' ';
4 var1 char := ' '; -- implicitly sized at 1 byte.
5 var2 char(1) := ' '; -- explicitly sized at 1 byte.
6 var3 char(1 byte) := ' '; -- explicitly sized at 1 byte.
7 var4 char(1 char) := ' '; -- explicitly sized at 1 character.
8 begin
9 dbms_output.put_line('c is ['||length(c)||']');
10 dbms_output.put_line('v is ['||length(v)||']');
11 dbms_output.put_line('var1 is ['||length(var1)||']');
12 dbms_output.put_line('var2 is ['||length(var2)||']');
13 dbms_output.put_line('var3 is ['||length(var3)||']');
14 dbms_output.put_line('var4 is ['||length(var4)||']');
15 v := v || ' ';
16 dbms_output.put_line('v is ['||length(v)||']'); end;
17 /
c is [32767]
v is [1]
var1 is [1]
var2 is [1]
var3 is [1]
var4 is [1]
v is [2]
2:character 和 char的区别:
character类型是char的subtype,character类型和它的基类优相同的大小,在char和character数据类型之间隐式转换。以下是一个subtype的定义:
subtype subtype_name is base_type[(maximum_size [byte | char])] [not null];
应用例子:
sql> declare
2 subtype code is char(1 char);
3 c char(1 char) := 'a';
4 d code;
5 begin
6 d := c;
7 end;
8 /
pl/sql 过程已成功完成。
,