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

向FLIGHT表插入数据时遇ORA-01861错误:字面量与格式字符串不匹配

ORA-01861: literal does not match format string 错误排查与解决

问题背景

向FLIGHT表插入数据时触发ORA-01861错误,相关表结构、插入语句及错误信息如下:

FLIGHT表结构

CREATE TABLE FLIGHT (
    TicketID INT NOT NULL,
    DipartureDate DATE,
    ArrivalDate DATE,
    TicketType VARCHAR(255),
    TicketPrice INT,
    
    AirplaneID INT NOT NULL,
    DepartureAirport VARCHAR(255) NOT NULL,
    ArrivalAirport VARCHAR(255) NOT NULL,
    Airlinecompany VARCHAR(255) NOT NULL,
    
    PRIMARY KEY (TicketID),

    FOREIGN KEY (AirplaneID) REFERENCES AIRPLANE(AirplaneID),
    FOREIGN KEY (DepartureAirport) REFERENCES AIRPORT(AirportName),
    FOREIGN KEY (ArrivalAirport) REFERENCES AIRPORT(AirportName),
    FOREIGN KEY (Airlinecompany) REFERENCES AIRLINE(Company)
);

待插入数据

INSERT INTO FLIGHT
VALUES (12, '2021-09-21 13:50:00', '2021-09-21 20:00:00', 'Bis', 800,
233, 'HA', 'CC', 'Azal');

INSERT INTO FLIGHT
VALUES (45, '2021-06-11 10:00:00', '2021-06-11 14:30:00', 'Ec', 200,
551, 'IST', 'TA', 'Turkish');

-- 其余插入语句省略

错误信息

INSERT INTO FLIGHT
VALUES (12, '2021-09-21 ', '2021-09-21 ', 'Bis', 800,
233, 'HA', 'CC', 'Azal')
Error report -
ORA-01861: literal does not match format string

错误原因分析

  1. 日期格式不匹配:Oracle默认的NLS_DATE_FORMAT通常为DD-MON-RR或类似格式,直接插入YYYY-MM-DD HH24:MI:SS格式的字符串会导致解析失败;错误示例中的日期字符串末尾还存在多余空格,进一步加剧了格式不匹配问题。
  2. 字段拼写隐患:表结构中出发日期字段名拼写错误(DipartureDate应为DepartureDate),虽不直接触发当前错误,但会增加后续维护的混淆风险。
  3. 外键约束风险:若插入的AirplaneID、DepartureAirport等外键值在关联表(AIRPLANE、AIRPORT、AIRLINE)中不存在,后续会触发外键约束错误。

修复方案

1. 显式转换日期格式(推荐)

使用TO_DATE()函数将字符串转换为DATE类型,指定明确的格式掩码,不受会话日期格式设置影响:

INSERT INTO FLIGHT
VALUES (12, TO_DATE('2021-09-21 13:50:00', 'YYYY-MM-DD HH24:MI:SS'), 
             TO_DATE('2021-09-21 20:00:00', 'YYYY-MM-DD HH24:MI:SS'), 
        'Bis', 800, 233, 'HA', 'CC', 'Azal');

2. 修正日期字符串无效空格

确保日期字符串无多余空格,例如将'2021-09-21 '改为'2021-09-21'(若仅需存储日期无时间),但仍建议配合TO_DATE使用以保证兼容性。

3. (可选)修正字段拼写错误

执行ALTER TABLE语句修正字段名,避免后续混淆:

ALTER TABLE FLIGHT RENAME COLUMN DipartureDate TO DepartureDate;

4. 验证外键值存在性

插入前确认关联表中存在对应记录,例如:

-- 验证AirplaneID=233是否存在
SELECT * FROM AIRPLANE WHERE AirplaneID=233;
-- 验证DepartureAirport='HA'是否存在
SELECT * FROM AIRPORT WHERE AirportName='HA';

完整修复后的插入语句示例

-- 修正后的第一条插入语句
INSERT INTO FLIGHT
VALUES (12, TO_DATE('2021-09-21 13:50:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-09-21 20:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Bis', 800,
233, 'HA', 'CC', 'Azal');

-- 其余插入语句按相同方式修改日期字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:24:18