(+1) Я упомянул Pro * C, но можно вставлять / обновлять недопустимые значения DATE с любого языка, использующего OCI (Oracle Call Interface). Мне никогда не приходило в голову использовать CONVERT_RAW_VALUE для создания недопустимого значения DATE. Приятно.

емещаю некоторые данные из одной схемы / таблицы оракула в новую схему / таблицу в той же базе данных.

Скрипт миграции выполняет следующие действия:

create table newtable as select
  ...
  cast(ACTIVITYDATE as date) as ACTIVITY_DATE,
  ...
FROM oldtable where ACTIVITYDATE > sysdate - 1000;

Если я посмотрю на исходные данные, это выглядит хорошо - вот одна запись:

select 
  activitydate,
  to_char(activitydate, 'MON DD,YYYY'),
  to_char(activitydate, 'DD-MON-YYYY HH24:MI:SS'),
  dump(activitydate),
  length(activitydate)
from orginaltable  where oldpk =  1067514

Результат:

18-NOV-10                 NOV 18,2010                        18-NOV-2010 12:59:15                          Typ=12 Len=7: 120,110,11,18,13,60,16  

Переносимые данные, показывающие, что данные повреждены:

select 
  activity_date,
  to_char(activity_date, 'MON DD,YYYY'),
  to_char(activity_date, 'DD-MON-YYYY HH24:MI:SS'),
  dump(activity_date),
  length(activity_date)
from newtable
where id =  1067514

Результат:

18-NOV-10                 000 00,0000                         00-000-0000 00:00:00                           Typ=12 Len=7: 120,110,11,18,13,0,16   

Около 5000 из 350 тысяч записей показывают эту проблему.

Кто-нибудь может объяснить, как это произошло?

Ответы на вопрос(2)

Ваш ответ на вопрос