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
相关产品推荐
相关产品推荐

