Create table - SQL Error: ORA-00905: missing keyword

别说谁变了你拦得住时间么 提交于 2019-12-12 02:49:25

问题


can anyone tell me what I've done wrong? I've tried changing a few things around but I keep getting the same error so I'm convinced that I've forgotten something. I hope someone can help

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:

Here's the Team table I'm referring to:

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

回答1:


Instead of double you can try to use NUMBER (precision, scale). So try something like this:

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)

);

NOTE: double precision is ANSI-supported datatypes whereas NUMBER is Oracle built-in datatypes

So if you want you can stick to double using precision as:

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



回答2:


Use NUMBER (precision, scale) instead of 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:


You should not use limit for int type...oracle will take default length for int type . Instead of int you can use Number type to make it run. And DOUBLE PRECISION is a data type in oracle but Double is not there.

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


来源:https://stackoverflow.com/questions/36424030/create-table-sql-error-ora-00905-missing-keyword

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!