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

Oracle SQL插入Cats表遇ORA-01861错误求助

ORA-01861错误排查:日期格式不匹配问题

问题详情

向Cats表插入数据时持续触发错误:

ORA-01861: literal does not match format string ORA-06512: at "SYS.DBMS_SQL", line 1721

使用的插入语句:

INSERT INTO Cats VALUES ('JACEK','M','CAKE','CATCHING','BALD','2008-12-01',67,NULL,2);

Cats表结构:

CREATE TABLE Cats (
    name VARCHAR2(15) CONSTRAINT cat_name_nn NOT NULL,
    gender VARCHAR2(1) CONSTRAINT cat_gen_ch CHECK (gender IN('M', 'W')),
    nickname VARCHAR2(15) CONSTRAINT cat_pk PRIMARY KEY,
    function VARCHAR2(10), 
    chief VARCHAR2(15), 
    in_herd_since DATE DEFAULT SYSDATE CONSTRAINT cat_inherd_nn NOT NULL,
    mice_ration NUMBER(3),
    mice_extra NUMBER(3),
    band_no NUMBER(2),
    CONSTRAINT cat_banno_fk FOREIGN KEY (band_no) REFERENCES Bands(band_no),
    CONSTRAINT cat_chief_fk FOREIGN KEY (chief) REFERENCES Cats(nickname),
    CONSTRAINT cat_fun_fk FOREIGN KEY (function) REFERENCES Functions(function)
);

错误原因

ORA-01861的核心问题是日期字面量格式与Oracle当前使用的日期格式不匹配。插入语句中in_herd_since字段传入的是'2008-12-01'(YYYY-MM-DD格式),但Oracle默认的日期格式(由NLS_DATE_FORMAT参数控制)通常是DD-MON-RR(比如01-DEC-08)或DD/MM/YYYY这类格式,直接传入YYYY-MM-DD字符串会导致解析失败。

解决方案

方法1:用TO_DATE函数显式转换格式

这是最稳妥、兼容性最好的方式,直接指定日期字符串的格式,不受系统NLS参数影响:

INSERT INTO Cats VALUES ('JACEK','M','CAKE','CATCHING','BALD',TO_DATE('2008-12-01','YYYY-MM-DD'),67,NULL,2);

方法2:修改会话级日期格式

如果需要多次使用YYYY-MM-DD格式插入数据,可以临时修改当前会话的NLS_DATE_FORMAT参数:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

执行这条语句后,原插入语句就能正常运行。

方法3:修改系统级日期格式(谨慎操作)

若要让所有会话默认使用YYYY-MM-DD格式,可修改系统级NLS_DATE_FORMAT,但需要DBA权限,且会影响所有用户的日期解析,非必要不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:10:26