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是保留字。使用其他列名称或将其放在双引号中
  • 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是任意的,则只需使用intnumber。无需预定义长度(除了类型的存储类之外)。