M:N关系SQL错误00904创建表时标识符无效[重复]
Posted
技术标签:
【中文标题】M:N关系SQL错误00904创建表时标识符无效[重复]【英文标题】:M:N Relation SQL Error 00904 Invalid Identifier when Create Table [duplicate] 【发布时间】:2018-09-30 21:47:45 【问题描述】:我查看了如何创建 M:N 关系表。
这是我的 SQL 代码:
CREATE TABLE "product"(
"ProductID" INT PRIMARY KEY,
"ProductName" VARCHAR(25) NOT NULL,
"Price" NUMBER NOT NULL,
"Description" VARCHAR(25),
"Quantity" INT NOT NULL
);
CREATE TABLE "transaction"(
"TransactionID" INT PRIMARY KEY,
"Date" INT NOT NULL
);
CREATE TABLE "trade"(
"ProdID" INT REFERENCES "product"("ProductID"),
"TransID" INT REFERENCES "transaction"("TransactionID"),
"QuantityPurchased" INT NOT NULL,
PRIMARY KEY (TransID, ProdID)
);
当我运行它时,我得到: 错误报告 - ORA-00904: "TRANSID": 无效的标识符 00904. 00000 - “%s:无效标识符” *原因: *行动:
我的代码有什么问题吗?
【问题讨论】:
如果您使用双引号混合大小写标识符,您必须一直使用它们。最简单的解决方案是在创建对象时永远不要使用双引号。然后您可以参考它们而无需担心大小写。 【参考方案1】:使用双引号使标识符(在本例中为列名)区分大小写。坚持一致的引用,你应该没问题:
CREATE TABLE "trade"(
"ProdID" INT REFERENCES "product"("ProductID"),
"TransID" INT REFERENCES "transaction"("TransactionID"),
"QuantityPurchased" INT NOT NULL,
PRIMARY KEY ("TransID", "ProdID")
-- Here -----^-------^--^------^
);
【讨论】:
【参考方案2】:建议:不要使用带引号的标识符。它只会让每个人的工作更加困难。您仍然可以使用transaction
或Transaction
而不是TRANSACTION
,因为数据库会将未加引号的名称转换为默认的大写字母。在定义某些东西时使用双引号会使其他人在引用该特定项目时使用双引号,使代码更难阅读,并为引用不匹配打开了大门,例如此处发生的情况。此外,一些工作场所的编码标准不允许引用标识符。我建议:
CREATE TABLE product(
ProductID INT PRIMARY KEY,
ProductName VARCHAR(25) NOT NULL,
Price NUMBER NOT NULL,
Description VARCHAR(25),
Quantity INT NOT NULL
);
CREATE TABLE transaction(
TransactionID INT PRIMARY KEY,
transaction_Date INT NOT NULL
);
CREATE TABLE trade(
ProdID INT REFERENCES product(ProductID),
TransID INT REFERENCES transaction(TransactionID),
QuantityPurchased INT NOT NULL,
PRIMARY KEY (TransID, ProdID)
);
【讨论】:
以上是关于M:N关系SQL错误00904创建表时标识符无效[重复]的主要内容,如果未能解决你的问题,请参考以下文章
错误报告:SQL 错误:ORA-00904::无效标识符 00904。00000 - “%s:无效标识符”