【问题标题】:Create table - SQL Error: ORA-00905: missing keyword创建表 - SQL 错误:ORA-00905:缺少关键字
【发布时间】:2016-07-25 06:09:21
【问题描述】:

谁能告诉我我做错了什么?我试过改变一些东西,但我一直收到同样的错误,所以我确信我忘记了一些东西。希望有人能帮忙

Error starting at line : 1 in command -


CREATE TABLE Player(
Plyr_ID int NOT NULL PRIMARY KEY, 
Plyr_Fname NVARCHAR2(20),
Plyr_Sname NVARCHAR2(20),
Plyr_DOB date,
Plyr_Height DOUBLE,
Plyr_Weight double,
Plyr_position NVARCHAR2(20),
Plyr_experience int,
Team_ID INT NOT NULL,
CONSTRAINT fk_Team FOREIGN KEY (Team_ID) references Team(Team_ID)

);


Error report -
SQL Error: ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:

这是我指的 Team 表:

CREATE TABLE Team(
Team_ID int NOT NULL PRIMARY KEY,
Team_Name NVARCHAR2(50),
Team_Homecourt nvarchar2(50)
);

【问题讨论】:

  • This data type information 可能更相关。您可以使用double precision,但除非您迫切需要使其与其他 RDBMS 兼容,否则您最好使用 Oracle 类型。

标签: sql oracle keyword


【解决方案1】:

您可以尝试使用NUMBER (precision, scale),而不是double。所以尝试这样的事情:

CREATE TABLE Player(
Plyr_ID int NOT NULL PRIMARY KEY, 
Plyr_Fname NVARCHAR2(20),
Plyr_Sname NVARCHAR2(20),
Plyr_DOB date,
Plyr_Height NUMBER(7,2),    --Change as per your requirement.
Plyr_Weight NUMBER(7,2),
Plyr_position NVARCHAR2(20),
Plyr_experience int,
Team_ID INT NOT NULL,
CONSTRAINT fk_Team FOREIGN KEY (Team_ID) references Team(Team_ID)

);

注意double precision 是 ANSI 支持的数据类型,而 NUMBER 是 Oracle 内置数据类型

因此,如果您愿意,可以使用以下精度来坚持双精度:

CREATE TABLE Player(
Plyr_ID int NOT NULL PRIMARY KEY, 
Plyr_Fname NVARCHAR2(20),
Plyr_Sname NVARCHAR2(20),
Plyr_DOB date,
Plyr_Height DOUBLE PRECISION,
Plyr_Weight DOUBLE PRECISION,
Plyr_position NVARCHAR2(20),
Plyr_experience int,
Team_ID INT NOT NULL,
CONSTRAINT fk_Team FOREIGN KEY (Team_ID) references Team(Team_ID)
);

【讨论】:

  • 嗨 Rahul,感谢您如此迅速地回复并解释它,双精度工作!
【解决方案2】:

使用 NUMBER(精度、小数位数)而不是 DOUBLE

CREATE TABLE Player(
Plyr_ID int NOT NULL PRIMARY KEY, 
Plyr_Fname NVARCHAR2(20),
Plyr_Sname NVARCHAR2(20),
Plyr_Dob Date,
Plyr_Height Number(10,2),
Plyr_Weight NUMBER(10,2),
Plyr_position NVARCHAR2(20),
Plyr_experience int,
Team_ID INT NOT NULL,
CONSTRAINT fk_Team FOREIGN KEY (Team_ID) references Team(Team_ID)

);

【讨论】:

    【解决方案3】:

    您不应该对 int 类型使用限制...oracle 将采用 int 类型的默认长度。您可以使用 Number 类型代替 int 来使其运行。 DOUBLE PRECISION 是 oracle 中的一种数据类型,但 Double 不存在。

    CREATE TABLE Player(
    Plyr_ID int NOT NULL PRIMARY KEY, 
    Plyr_Fname NVARCHAR2(20),
    Plyr_Sname NVARCHAR2(20),
    Plyr_DOB date,
    Plyr_Height DOUBLE PRECISION,
    Plyr_Weight DOUBLE PRECISION,
    Plyr_position NVARCHAR2(20),
    Plyr_experience int,
    Team_ID INT NOT NULL,
    CONSTRAINT fk_Team FOREIGN KEY (Team_ID) references Team(Team_ID)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2016-03-12
      • 1970-01-01
      • 2010-09-23
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多