很抱歉提出一个问题,该问题在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')
答案 0 :(得分:1)
当进行隐式类型转换时,我经常看到该错误。您可以尝试:
delete from MY_TABLE where MYTIMESTAMP < systimestamp - interval '30' day