尝试创建表时 Oracle SQL “无效标识符错误”
Posted
技术标签:
【中文标题】尝试创建表时 Oracle SQL “无效标识符错误”【英文标题】:Oracle SQL "invalid identifier error" when trying to create a table 【发布时间】:2019-12-12 13:31:35 【问题描述】:我已经成功构建了这些表:
CREATE TABLE Tables
(
tnum NUMBER(4) PRIMARY KEY,
floor NUMBER(1), CHECK (floor >= 0 AND floor <= 4),
capacity NUMBER(2), CHECK(capacity >= 0 AND capacity <= 25),
location VARCHAR(50)
);
CREATE TABLE Customer
(
name VARCHAR(25),
phone VARCHAR(16),
city VARCHAR(25),
PRIMARY KEY(name, phone)
);
CREATE TABLE Menu
(
pid NUMBER(4) PRIMARY KEY,
pname VARCHAR(25),
price NUMBER(4, 1)
);
但是当我尝试构建这个时,我得到了一个错误:
错误报告 - ORA-00904: : 无效的标识符 00904. 00000 - “%s:无效标识符” *原因: *行动:
CREATE TABLE Orders
(
orderid NUMBER(4) PRIMARY KEY,
custname VARCHAR(25),
CONSTRAINT fk_customer
FOREIGN KEY (custname)
REFERENCES Customer(customer.name),
phone VARCHAR(16),
CONSTRAINT fk_customer
FOREIGN KEY(phone)
REFERENCES Customer(customer.phone),
date DATE,
tnum NUMBER(4),
CONSTRAINT fk_tables
FOREIGN KEY(tnum)
REFERENCES Tables(tables.tnum),
numofdiners NUMBER(2)
);
我试图了解导致问题的原因,即使我检查了this link 和其他一些链接,我也没有设法解决问题。
【问题讨论】:
参考表(tnum)... 【参考方案1】:您可以直接在列之后指定列级别约束,但是您必须去掉逗号和foreign key
部分,因为很明显是哪一列。
但您需要在外键定义中包含主键的所有列。而且由于客户表的主键由两列组成,因此您不能在订单表中使用内联外键。
外键“references”部分需要在target表中指定列名,不带表前缀(表已经明确,因为references table_xxx
部分,所以有无需在目标列前加上表名)。
另外DATE
是保留关键字。
CREATE TABLE Orders
(
orderid NUMBER(4) PRIMARY KEY,
custname VARCHAR(25) not null
phone VARCHAR(16) not null,
reservation_date DATE,
tnum NUMBER(4) --<< no comma here!
-- no FOREIGN KEY keyword here
CONSTRAINT fk_tables
REFERENCES Tables(tnum), --<< only the column name between the (...)
numofdiners NUMBER(2), --<< you need a comma before the table level constraints
CONSTRAINT fk_customer
FOREIGN KEY(name, phone) --<< list both columns here
REFERENCES Customer(name, phone) --<< and here
);
请注意,多列外键中的列是按位置而不是名称匹配的。 因此,以下将是错误
CONSTRAINT fk_customer
FOREIGN KEY(phone, name)
REFERENCES Customer(name, phone)
【讨论】:
以上是关于尝试创建表时 Oracle SQL “无效标识符错误”的主要内容,如果未能解决你的问题,请参考以下文章
尝试查看表时 Oracle SQL Developer 没有响应(或建议使用 Oracle Mac 客户端)
mysql.connector.errors.ProgrammingError: 1064 (42000): 尝试创建表时 SQL 语法有错误