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

ORA-01843错误排查:DDL与DML语句执行异常问题咨询

ORA-01843错误原因及解决办法

嘿,这个ORA-01843错误我太熟了——它表示你输入的日期是无效的月份,咱们一步步来拆解问题:

核心原因

Oracle数据库默认的日期格式通常是DD-MON-RR(比如05-JUL-90),它没法直接识别你INSERT语句里用的YYYY-MM-DD格式字符串('1990-07-05'和'2015-01-08')。当你把这种非默认格式的字符串直接插入DATE类型列时,数据库无法正确解析日期,就会抛出ORA-01843错误。

解决办法

这里有两种靠谱的解决方式:

  • 方法一:用TO_DATE()显式指定日期格式(推荐,不受默认格式影响)
    把INSERT语句里的日期字符串用TO_DATE()函数包裹,明确告诉数据库日期的格式:

    insert into emp_details values (01,'John','Wick',TO_DATE('1990-07-05','YYYY-MM-DD'),9856482358,'Goa',403001,'M','SDE II', TO_DATE('2015-01-08','YYYY-MM-DD'));
    
  • 方法二:临时修改会话日期格式
    如果你不想改INSERT语句,可以先修改当前会话的日期格式为YYYY-MM-DD:

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

    执行这条命令后,再运行原来的INSERT语句就能正常工作了。不过要注意,这个修改只对当前会话有效,重新打开会话后会恢复默认格式。

额外小问题

另外你的CREATE TABLE语句里有个小语法错误:最后一列Join_Date date后面多了个逗号,这个会导致DDL执行失败,得先删掉这个逗号,修正后的DDL如下:

create table emp_details ( 
    ID number(2) constraint t_pk primary key, 
    F_Name varchar(10) not null, 
    L_Name varchar(10) not null, 
    DOB date, 
    Mob_no number(10), 
    City varchar(10), 
    PIN number(5), 
    Gender char(1), 
    Designation varchar(15), 
    Join_Date date  -- 移除了末尾的逗号
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:50:23