Question

J'utilise Oracle 10g et j'ai des colonnes avec Type_Name

TIMESTAMP(6) WITH TIME ZONE

Une fois gonflés dans les classes Java, ils apparaissent comme

oracle.sql.TIMESTAMPTZ 

Mais DbUnit ne peut pas gérer la conversion de classes spécifiques Oracle en chaînes pour l’écriture en XML. Je me demande s’il est possible de convertir facilement (par exemple, dans ma déclaration SELECT) ces horodatages spécifiques Oracle en quelque chose dans java.sql.

Était-ce utile?

La solution

Je n'ai pas eu à traiter ce problème avec précision, mais je présume que le faire passer comme une chaîne à partir de la requête SELECT conviendrait.

Vous pouvez utiliser le à_char . une fonction. Pour le convertir en chaîne. par exemple:

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

Ceci serait alors vu par votre programme comme une chaîne. TZD inclut des informations sur le fuseau horaire (aucune dans cet exemple)

Plus tard, cela pourrait être analysé par Java à l'aide de SimpleDateFormat classe.

Sinon, le oracle.sql. La classe TIMESTAMPTZ a une méthode appelée dateValue qui renvoie une classe java.sql.Date .

Autres conseils

Je voudrais faire remarquer qu’utiliser IYYY comme format de l’année peut ne pas être une bonne idée, à moins que vous ne souhaitiez vraiment obtenir l’année ISO. Vous devez utiliser YYYY au lieu de IYYY.

Essayez d’exécuter votre code SQL pour le 31.12.2012 avec

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

retours "2013-12-31 00: 00: 00.000000000 " ce qui n’est pas l’année que vous attendez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top