尝试使用sql创建表时标识符无效

xxe27gdn  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(560)

我试图创建一个表,但得到一个无效的标识符错误。这是什么意思?我已经把代码看了一遍又一遍。我其他的话都说得很好。我搞不懂这有什么问题。
下面是返回错误的语句:

/* Create Transaction Table */
31 CREATE TABLE TRANSACTION(TxNbr INTEGER PRIMARY KEY,
32                        TxCode CHAR(1) NOT NULL,
33                        AccountNbr INTEGER NOT NULL,
34                        Amount DECIMAL(13,2) NOT NULL,
35                         Date DATE,
36                         Time TIME,
37                         RefNbr VARCHAR(3),
38                         FOREIGN KEY(AccountNbr) REFERENCES ACCOUNT (AccountNbr) ON DELETE SET NULL,
39                         FOREIGN KEY(TxCode) REFERENCES TX_TYPE (TxCode) ON DELETE SET NULL
40                         );

错误如下:

Error starting at line : 31 in command -
Error report -
ORA-00904: : invalid identifier
00904. 00000 -  "%s: invalid identifier"

* Cause:
* Action:
fiei3ece

fiei3ece1#

您的代码有两个问题(不考虑外键约束,在不实际了解相关表的结构的情况下我们无法验证) DATE 是oracle中的保留字(这是一种数据类型),因此它不能用于列名,除非用双引号将其括起来—但如果这样做,则每次访问该列时都需要用引号将其括起来。我建议只使用与语言关键字不冲突的列名。
根本没有 TIME oracle中的数据类型;这个 DATE 数据类型实际上存储日期和时间-这通常比在两个不同的列中分离日期和时间部分要好,因为它使日期算法更容易。我建议把那根柱子去掉。
考虑:

CREATE TABLE TRANSACTION(
    TxNbr INTEGER PRIMARY KEY,
    TxCode CHAR(1) NOT NULL,
    AccountNbr INTEGER NOT NULL,
    Amount DECIMAL(13,2) NOT NULL,
    TxDate DATE,
    RefNbr VARCHAR(3)
    FOREIGN KEY(AccountNbr) REFERENCES ACCOUNT (AccountNbr) ON DELETE SET NULL,
    FOREIGN KEY(TxCode) REFERENCES TX_TYPE (TxCode) ON DELETE SET NULL
);

相关问题