Una DATE de Oracle no almacena tiempos con más precisión que un segundo. No puede almacenar datos de precisión de milisegundos en un DATE columna.
Sus dos opciones son truncar la cadena de milisegundos antes de convertirla en DATE , es decir,
to_date( substr('23.12.2011 13:01:001', 1, 19), 'DD.MM.YYYY HH24:MI:SS' )
o para convertir la cadena en un TIMESTAMP que admite precisión de milisegundos
to_timestamp( '23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3' )