不理解PL / .SQL中的“可变长度”

时间:2012-03-30 08:23:53

标签: plsql

请参阅以下摘自PL / SQL教程的摘录。我遇到问题的部分是第3行,其中工资的长度为6,我不明白这意味着什么。在这段摘录的最后一行,它声明了一个“长度为10”的变量,然后将其初始化为“HR Dept”,当然不是10个字符。什么是长度?


DECLARE

salary  number (6);

* “salary” is a variable of datatype number and of length 6.

当变量指定为NOT NULL时,必须在声明变量时初始化该变量。

例如:下面的例子声明了两个变量,其中一个是非空的。

DECLARE

salary number(4);

dept varchar2(10) NOT NULL := “HR Dept”;

另一个例子:

DECLARE 



var_salary number(6); 

 var_emp_id number(6) = 1116; 

1116不是6位数。我很茫然。

3 个答案:

答案 0 :(得分:4)

最大长度。如果你试图将11个字符存储到dept中,或者如果你开始每年在你的工作中创造一个很酷的百万字符,你会发现这个。

与创建表时没有什么不同:

create table users (
    id     integer,
    name   varchar(20)
);

在这种情况下,20是名称的最大长度。这并不意味着每一行都必须有一个20个字符的名称。

答案 1 :(得分:3)

这些是数据的最大“长度”。从documentation开始,这是数字的确切含义:

  

<强> NUMBER [ (p [, s]) ]

     

具有精度p和比例s的数字。精度p的范围可以从   刻度s的范围可以从-84到127.精度和   比例是十进制数字。 NUMBER值需要1到22   字节。

NUMBER(6)类型的变量可以存储-999999到999999之间的任何数字。

对于VARCHAR2:

  

<强> VARCHAR2(size [BYTE | CHAR])

     

可变长度字符串   最大长度大小字节或字符。最大大小为4000字节或   字符,最小为1个字节或1个字符。你必须指定   VARCHAR2的大小。 BYTE表示该列将具有字节   长度语义。 CHAR表示该列将具有字符   语义。

VARCHAR2(10)最多可存储10个字节或10个字符(取决于参数nls_length_semantics)。

答案 2 :(得分:0)

在oracle中,数字变量的长度是它可以容纳的最大位数。对于您的情况,您可以在-99999到999999之间输入数字