извините за вопрос, который имеет много ответов на Stackoverflow и позволяет мне поставить этот вопрос в моем контексте, который может отличаться от предыдущих вопросов.
Я нахожусь в производственной базе данных, где я не могу изменить данные. Данные, поступающие в эту базу данных, очень динамичны, они постоянно меняются, что затрудняет воспроизведение этой ошибки. Я получаю доступ к Oracle 11g через JDBC (Java).
Хорошо, для моего УДАЛЕНИЯ я получаю
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')