You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Oracle建表SQL时报错ORA-00904无效标识符问题求助

ORA-00904报错原因及解决方案

报错根因

  • 核心问题是你在CREATE TABLE语句中使用了Oracle数据库的**保留关键字DATE**作为字段名,保留关键字不允许直接用作标识符(表名、字段名等),因此触发ORA-00904无效标识符报错。

解决方法

方案1:更换字段名(最推荐,避免后续各类兼容问题)

把DATE字段替换为非保留关键字的业务相关名称,比如OPERATION_DATE、TRANS_DATE等,修改后的建表语句示例:

CREATE TABLE CERDIT_CARD_LOG
(
    CERDIT_CARD_NUMBER     CHAR(20) NOT NULL,
    CERDIT_CARD_LOG_NUMBER CHAR(15) NOT NULL,
    CERDIT_CARD_NUM        CHAR(20) NOT NULL,
    OPERATION_DATE         DATE     NOT NULL, -- 替换原DATE字段
    OPERATION_TYPE         CHAR(20) NOT NULL,

    CONSTRAINT PK_CERDIT_CARD_LOG 
        PRIMARY KEY (CERDIT_CARD_LOG_NUMBER, CERDIT_CARD_NUM)
);

ALTER TABLE CERDIT_CARD_LOG
    ADD CONSTRAINT FK_CERDIT_C_RECORD_CERDIT_C 
            FOREIGN KEY (CERDIT_CARD_NUMBER)
                    REFERENCES CERDIT_CARD (CERDIT_CARD_NUMBER);

方案2:强制使用关键字作为字段名(不推荐,仅适配特殊场景)

如果业务要求必须使用DATE作为字段名,可以用双引号包裹该字段名。注意Oracle中双引号包裹的标识符是大小写敏感的,后续所有查询、修改操作引用该字段时都必须加双引号且保持大小写一致,示例:

CREATE TABLE CERDIT_CARD_LOG
(
    CERDIT_CARD_NUMBER     CHAR(20) NOT NULL,
    CERDIT_CARD_LOG_NUMBER CHAR(15) NOT NULL,
    CERDIT_CARD_NUM        CHAR(20) NOT NULL,
    "DATE"                 DATE     NOT NULL, -- 双引号包裹关键字
    OPERATION_TYPE         CHAR(20) NOT NULL,

    CONSTRAINT PK_CERDIT_CARD_LOG 
        PRIMARY KEY (CERDIT_CARD_LOG_NUMBER, CERDIT_CARD_NUM)
);

后续引用该字段的示例:

SELECT "DATE" FROM CERDIT_CARD_LOG WHERE "DATE" > DATE'2024-01-01';

内容的提问来源于stack exchange,提问作者iMaiclove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:36:02