ORA-01847每月的日期必须介于1月和最后一天之间

时间:2017-07-23 18:22:02

标签: php android sql oracle

我对它进行了一些研究,但我无法弄明白。我的问题是由于ORA-01847错误,我无法添加新的记录oracle数据库。

我尝试将此日期值添加到数据库:23.07.2017 18:10:00

$MYDATE= $data[$i]->MYDATE;
//I ALSO ADD THIS LINE
$str = oci_parse($conn, "ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY HH24:MI:SS'");
oci_execute($str);
//
$sql = 'INSERT INTO MYTABLE(ID,MYDATE)'.'VALUES(:ID,:MYDATE)';
$compiled = oci_parse($conn, $sql);
oci_bind_by_name($compiled, ':ID', $ID);
oci_bind_by_name($compiled, ':MYDATE', $MYDATE);
oci_execute($compiled);

然而它给了我错误:

  

ORA-01847每月的日期必须介于1个月和最后一天之间的错误。

2 个答案:

答案 0 :(得分:0)

在php代码中更改NLS_DATE_FORMAT后,您还可以尝试执行此行。

ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';

如果NLS_DATE_FORMAT未设置,有时设置NLS_DATE_LANGUAGE无效。

答案 1 :(得分:-3)

添加此触发器数据库

CREATE OR REPLACE TRIGGER USER_NAME.MY_SET_DATE after logon on database
begin
if (user = 'USER_NAME') then
execute immediate
'alter session set nls_date_format = ''YYYY-MM-DD'' ';
-- execute immediate
--'ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE' ;

end if;
end my_set_date;