Pregunta

Estoy ejecutando Oracle 10g y tengo columnas con Type_Name

TIMESTAMP(6) WITH TIME ZONE

Cuando se inflan en clases de java, salen como

oracle.sql.TIMESTAMPTZ 

Pero DbUnit no puede manejar la conversión de clases específicas de Oracle a cadenas para escribir en XML. Me pregunto si hay alguna forma fácil de convertir (por ejemplo, en mi declaración SELECT) de estas marcas de tiempo específicas de Oracle a algo en java.sql.

¿Fue útil?

Solución

No he tenido que lidiar con este problema exactamente, pero supongo que tenerlo como una cadena desde la consulta SELECT estaría bien.

Puede usar to_char función. Para convertirlo en una cadena. por ejemplo:

SQL> select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

D
----------------------------------
2008-10-21 17:00:43.501591

El programa lo verá como una cadena. TZD incluye información de la zona horaria (de la que no hay ninguna en este ejemplo)

Más tarde, esto podría luego ser analizado por Java utilizando Clase SimpleDateFormat .

Alternativamente, oracle.sql. La clase TIMESTAMPTZ tiene un método llamado dateValue que devuelve una clase java.sql.Date .

Otros consejos

Me gustaría comentar que usar IYYY como formato para el año podría no ser una buena idea a menos que realmente desee obtener el año ISO. Debes usar YYYY en lugar de IYYY.

Intenta ejecutar tu SQL para 31.12.2012 usando

select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

devuelve " 2013-12-31 00: 00: 00.000000000 " que no es el año que se esperaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top