ORA-01841 :(完整)年份必须...不为0。如何复制和修复?

时间:2018-11-02 13:48:34

标签: oracle oracle11g

很抱歉提出一个问题,该问题在Stackoverflow上有很多答案,可以让我在上下文中提出这个问题,这可能与以前的问题有所不同。

我在生产数据库中,无法更改数据。进入该数据库的数据是高度动态的,并且始终在变化,因此很难重现该错误。我正在通过JDBC(Java)访问 Oracle 11g

好吧,对于我的DELETE,我得到

ORA-01841: (full) year must be between -4713 and +9999, and not be 0. 

这是我的桌子(简体):

MY_TABLE 
Name                         Null?    Type                        
---------------------------- -------- --------------------------- 
MYTIMESTAMP                  NOT NULL TIMESTAMP(6) WITH TIME ZONE

我有时会为此删除得到ORA-01841:

delete from MY_TABLE where MYTIMESTAMP < sysdate - 30

当我查找数据时,一切似乎都很好。所以我需要一个主意:

1)如何将无效的时间戳插入MY_TABLE,以便可以重现该错误? (*)

2)如何重写DELETE语句,这样我就不会失败?请注意,我无法更改Oracle上的现有数据。

谢谢

(*)我试图插入这些“无效”日期,但可惜,还不够无效:

insert into MY_TABLE (MY_IMESTAMP) values ('31-DEC-9999 11:00:00 PM +2:00')
insert into MY_TABLE (MY_IMESTAMP) values ('31-DEC-0 11:00:00 PM +2:00')

1 个答案:

答案 0 :(得分:1)

当进行隐式类型转换时,我经常看到该错误。您可以尝试:

delete from MY_TABLE where MYTIMESTAMP < systimestamp - interval '30' day