Felicidades, eso es muy bueno!
Typ = 12 Len = 7: 100,100,0,0,1,1,1
Los elementos que son volcado siglo, año, mes, día, hora minuto segundo. Así que lo que tienes ahí es midight el 0-0-0000, que definitivamente no es una fecha válida ...
SQL> create table d (d1 date)
2/
Table created.
SQL> insert into d values (to_date('00-00-0000', 'dd-mm-yyyy'))
2/
insert into d values (to_date('00-00-0000', 'dd-mm-yyyy'))
*
ERROR at line 1:
ORA-01847: day of month must be between 1 and last day of month
SQL>
edición
Solía excelente truco de Gary a sacaclavos una fecha cero en una tabla ....
SQL> select * from d
2/
D1
---------
00-DECEMB
19-JAN-10
SQL>
Así que al menos sabemos cómo lo hicieron sus desarrolladores de "Magic". Ahora todo lo que tenemos que hacer es trabajar en torno a su astucia.
Creo que la única manera de hacer esto - y es probable que no le va a gustar que - es la construcción de una capa de API, el uso de vistas ....
SQL> create or replace view v_d as
2 select case when d1 = trash_date then null else d1 end as d1
3 from d
4/
View created.
SQL> select * from v_d
2/
D1
---------
19-JAN-10
SQL>
No es el aspecto menos preocupante de esto es que necesitará tener activadores INSTEAD IF que en realidad inserten fechas cero en la tabla subyacente (nuevamente, usando la función de Gary). Además, para mantener los mismos nombres de objeto, es probable que deba compilar la API en un esquema diferente.
Así que no estoy minimizando la cantidad de trabajo que está involucrado. El problema es que los desarrolladores anteriores corrieron una gran cantidad de deuda técnica con su solución. Ahora depende de usted pagar la deuda pendiente (dado que no desea pagar el capital reescribiendo la base de datos).
finales de noticias de última hora
Acabo de venir a través de esta fecha divertido en mi propio entorno, que ofrece una explicación alternativa para estas fechas divertidos. Agregué una columna de FECHA a una tabla que tenía filas. Usé la cláusula DEFAULT para establecer un valor predeterminado para sysdate. ¿Adivina qué pasó?
SQL> select * from t69
2/
ID
----------
1
2
SQL> alter table t69 add col2 date default sysdate not null
2/
Table altered.
SQL> select * from t69
2/
ID COL2
---------- ---------
1 00-DECEMB
2 00-DECEMB
SQL>
Para el registro, el sysdate funciona como se espera para las nuevas filas ...
SQL> insert into t69 (id) values (3)
2/
1 row created.
SQL> select * from t69
2/
ID COL2
---------- ---------
1 00-DECEMB
2 00-DECEMB
3 28-APR-10
SQL>
Por favor, aclare algo. ¿Estas fechas ya están en su base de datos Oracle? Si es así, ¿están realmente en una columna con un tipo de datos FECHA? ¿O está tratando de importarlos de un producto de base de datos diferente? – APC
Sí, estas fechas ya están en la base de datos. La columna tiene el tipo de datos DATE. – Noam
Cuando lee la fila en la aplicación .NET, ¿qué aparece en la columna? –