您现在的位置: 万盛学电脑网 >> 程序编程 >> 数据库 >> oracle教程 >> 正文

PL/SQL的几个概念区别

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  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 过程已成功完成。