我收到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)
答案 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')