【问题标题】:ORA-01847 day of month must be between 1 and last day of monthORA-01847 月份中的某天必须介于 1 和该月的最后一天之间
【发布时间】:2017-12-29 07:47:05
【问题描述】:

我对此进行了一些研究,但我无法弄清楚。我的问题是由于 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 day of month must be between 1 and last day of month 错误。

【问题讨论】:

  • 告诉我们字符串 $MYDATE 包含什么
  • MYTABLE.MYDATE的数据类型是什么???
  • 数据类型为 DATE
  • 你试过$sql = "INSERT INTO MYTABLE(ID,MYDATE) VALUES (:ID,TO_DATE(:MYDATE, 'DD.MM.YYYY HH24:MI:SS'))";吗?

标签: php android sql oracle


【解决方案1】:

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

ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';

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

【讨论】:

  • 现在它给出了 ORA-00932 不一致的数据类型:预期 NUMBER 得到 DATE 错误
  • 你的id列是number数据类型吗?
【解决方案2】:

添加这个触发器你的数据库

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多