问题描述
create table LPU_Employee (
UID decimal(6) not null primary key,EName varchar(30) not null,Hire_Date date not null,Deparment varchar(30) null,HOD varchar(30) null,HOD_UID decimal(6) not null,Salary double null
);
解决方法
-
UID
是保留字。使用其他列名称或将其放在双引号中 -
double
无法识别为数据类型(对不起,我用英式拼写)。使用float
。
create table LPU_Employee (
"UID" decimal(6) not null primary key,EName varchar(30) not null,Hire_Date date not null,Deparment varchar(30) null,HOD varchar(30) null,HOD_UID decimal(6) not null,Salary FLOAT null
);
,
您直接问题的答案是关于UID。我强烈建议对该列进行 reaming 以避免冲突。但是我还有其他建议:
create table LPU_Employee (
employee_UID decimal(6) not null primary key,Deparment varchar2(30) null,HOD varchar2(30) null,Salary number null
);
尤其是,它使用varchar()
而不是varchar2()
- Oracle建议这种类型。另外,salary
不使用double
;它使用number
。根据我的经验,永远不要使用浮点表示法存储货币金额。
此外,我质疑将decimal(6)
用作ID。根据我对此类ID的经验,使用前导零。因此,id将是123
而不是000123
,而且每个人的长度都是相同的。
如果是这种情况,请使用一个字符串,其中值必须为数字:
employee_UID varchar2(6) not null primary key check (regexp_like(employee_UID,'^[0-9]{6}$'))
如果6
是任意的,则只需使用int
或number
。无需预定义长度(除了类型的存储类之外)。