获取oci_execute():ORA-01843:插入记录时php中的有效月份无效?

时间:2015-12-29 08:13:54

标签: php oracle

我收到oci_execute():ORA-01843:无效月份无效。它为什么要给它?

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 个答案:

答案 0 :(得分:1)

您正在将字符串插入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函数将字符串显式转换为日期并将格式作为第二个参数传递,但这将要求您的应用程序代码在仅使用指定的日期格式时保持一致。

TO_DATE('29-DEC-2015', 'DD-MON-YYYY')