CREATE TABLE Prescription (
pre_id NUMBER(10),
pssn CHAR(11),
phy_ssn CHAR(11),
date CHAR(11),
quantity INTEGER,
trade name CHAR(20),
pharm id CHAR(11),
drop_off_time CHAR(10),
pick_up_time CHAR(10),
status CHAR (15),
PRIMARY KEY(pre_id),
FOREIGN KEY (pssn) REFERENCES Pri_Phy_Patient,
FOREIGN KEY (phy_ssn) REFERENCES Doctor,
FOREIGN KEY (trade_name, pharm_id) REFERENCES Make_Drug);
使用上面的sql语句时出现ORA-00904:invalid identifier
错误。
与上述相关的其他sql语句是:
CREATE TABLE Doctor (
phy_ssn CHAR(11),
name CHAR(20),
speciality CHAR(30),
exp_years CHAR(10),
PRIMARY KEY (phy_ssn));
CREATE TABLE Pri_Phy_Patient (
pssn CHAR(11),
name CHAR(20),
age INTEGER,
address CHAR(20),
phy ssn CHAR(11),
PRIMARY KEY (pssn),
FOREIGN KEY (phy_ssn) REFERENCES Doctor );
CREATE TABLE Make_Drug (
trade_name CHAR(20),
pharm_id CHAR(11),
formula VARCHAR(100)
PRIMARY KEY (trade_name, pharm_id),
FOREIGN KEY (pharm_id) REFERENCES Pharm_co);
有人可以建议我能做些什么吗?!!
答案 0 :(得分:1)
如果您在SQL*Plus
中执行该语句,则可以轻松找到错误并进行修复。
SQL> CREATE TABLE Prescription (
2 pre_id NUMBER(10),
3 pssn CHAR(11),
4 phy_ssn CHAR(11),
5 date CHAR(11),
6 quantity INTEGER,
7 trade name CHAR(20),
8 pharm id CHAR(11),
9 drop_off_time CHAR(10),
10 pick_up_time CHAR(10),
11 status CHAR (15),
12 PRIMARY KEY(pre_id),
13 FOREIGN KEY (pssn) REFERENCES Pri_Phy_Patient,
14 FOREIGN KEY (phy_ssn) REFERENCES Doctor,
15 FOREIGN KEY (trade_name, pharm_id) REFERENCES Make_Drug);
date CHAR(11),
*
ERROR at line 5:
ORA-00904: : invalid identifier
DATE
作为列名。请将其保留在"" double-quotation marks
或更好地避免使用keyword
。 create table
脚本的更多问题 -
trade name
是无效的列名。将其更改为trade_name
。pharm id
更改为pharm_id
。CHAR
数据类型?它将始终在右侧填充空白并占用空间。更好地使用VARCHAR2
数据类型。答案 1 :(得分:0)
此脚本有效:
CREATE TABLE Doctor (
phy_ssn CHAR(11) not null,
name CHAR(20),
speciality CHAR(30),
exp_years CHAR(10),
constraint pk_phy_ssn PRIMARY KEY (phy_ssn));
CREATE TABLE Pri_Phy_Patient (
pssn CHAR(11) not null,
name CHAR(20),
age INTEGER,
address CHAR(20),
phy_ssn CHAR(11),
constraint pk_pssn PRIMARY KEY (pssn),
constraint fk_ppp_phy_ssn FOREIGN KEY (phy_ssn) REFERENCES Doctor(phy_ssn) );
CREATE TABLE Make_Drug (
trade_name CHAR(20) not null,
pharm_id CHAR(11) not null,
formula VARCHAR(100),
constraint pk_trname_phid PRIMARY KEY (trade_name, pharm_id));
CREATE TABLE Prescription (
pre_id NUMBER(10) not null,
pssn CHAR(11),
phy_ssn CHAR(11),
date_time CHAR(11),
quantity INTEGER,
trade_name CHAR(20),
pharm_id CHAR(11),
drop_off_time CHAR(10),
pick_up_time CHAR(10),
status CHAR(15),
constraint pk_pre_id PRIMARY KEY(pre_id),
constraint fk_pre_pssn FOREIGN KEY (pssn) REFERENCES Pri_Phy_Patient(pssn),
constraint fk_pre_phy_ssn FOREIGN KEY (phy_ssn) REFERENCES Doctor(phy_ssn),
constraint fk_pre_tr_nm_ph_id FOREIGN KEY (trade_name, pharm_id) REFERENCES Make_Drug(trade_name, pharm_id));
<强>更新强>
问题主要是由于列名称中间的空格,缺少逗号而引发了无效的标识符,因为您尝试使用date
作为列名,Oracle并不喜欢它。 / p>
您可以使用此Demo。
答案 2 :(得分:0)
将DATE列名更改为任何其他名称,因为您不能将DATE用作列名或表名。您可以从以下链接http://www.petefreitag.com/tools/sql_reserved_words_checker/
获取有关Oracle保留字的更多详细信息答案 3 :(得分:-2)
日期CHAR(11) 日期是SQL中的保留字。它不能像你那样被声明为列。 请更改列名称,它将起作用。