ORA-00904::尝试创建表时标识符无效,但未使用保留关键字


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是任意的,则只需使用intnumber. 无需预定义长度(超出类型的存储类)。

  • 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
);

最新更新