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。 我强烈建议重命名该列以避免冲突。 但我还有其他建议:
create table LPU_Employee (
employee_UID decimal(6) not null primary key,
EName varchar(30) not null,
Hire_Date date not null,
Deparment varchar2(30) null,
HOD varchar2(30) null,
HOD_UID decimal(6) not null,
Salary number null
);
特别是,它不是使用varchar()
而是使用varchar2()
- 这是Oracle建议用于此类类型的。 此外,salary
不使用double
;它使用number
. 根据我的经验,永远不应该使用浮点表示来存储货币金额。
此外,我质疑对 id 使用decimal(6)
。 根据我对此类 id 的经验,使用前导零。 因此,id不是123
而是000123
- 每个人的长度都相同。
如果是这种情况,请使用一个字符串,其中值必须是数字:
employee_UID varchar2(6) not null primary key check (regexp_like(employee_UID, '^[0-9]{6}$'))
如果6
是任意的,则只需使用int
或number
. 无需预定义长度(超出类型的存储类)。
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
);