当前位置: 首页 > 知识库问答 >
问题:

获取oci_execute():ora-01843:不是有效月份在php中插入记录时无效?

刘阳荣
2023-03-14
INSERT INTO DETAIL (PPD_ID, PPD_ID,PPD_ENTRY_DATE, PPD_IGM_ID, PPD_DFM_ID, PPD_DRM_ID, PPD_HEIGHT, PPD_UOM_ID, PPD_FTM_ID, PPD_FRQ_ID, PPD_START_DATE_TIME, PPD_END_DATE_TIME, PPD_STATUS, PPD_STM_ID) 
VALUES ('WS00318229',2440900,'29-12-2015',350,1,1,50,46,1,1,'29-12-2015','29-12-2015','PRESCRIBED',6)

当我使用php中的上述查询将记录插入到oracle数据库时,它给出了以下错误。

oci_execute(): ORA-01843: not a valid month invalid

但是当我使用下面的查询时,它没有给出任何错误,而是插入了记录。如何解决这个问题?这个错误已经存在了,但我不清楚答案。任何想法为什么会这样。

INSERT INTO DETAIL (PPD_ID, PPD_ID,PPD_ENTRY_DATE, PPD_IGM_ID, PPD_DFM_ID, PPD_DRM_ID, PPD_HEIGHT, PPD_UOM_ID, PPD_FTM_ID, PPD_FRQ_ID, PPD_START_DATE_TIME, PPD_END_DATE_TIME, PPD_STATUS, PPD_STM_ID) 
VALUES ('WS00318229',2440900,'29-DEC-2015',350,1,1,50,46,1,1,'29-DEC-2015','29-DEC-2015','PRESCRIBED',6)

共有1个答案

孟哲
2023-03-14

您正在将字符串插入到date列中。这样做时,oracle将根据您的NLS设置执行隐式转换,特别是nls_date_format。显然,当您从php脚本和从您使用的某个客户端(SQL*Plus、SQL Developer等)连接时,NLS设置是不同的。

您可以使用以下查询检查会话参数。

SELECT * FROM nls_session_parameters;

对于以'29-dec-2015'nls_date_format格式显示的日期,应为'dd-mon-yyyy'。如果它有其他值,可以使用以下查询更改它。

alter session set nls_date_format='DD-MON-YYYY'
TO_DATE('29-DEC-2015', 'DD-MON-YYYY')
 类似资料: