Bonjour à toutes et à tous,

Voilà je suis entrain de faire une analyse technique afin d'étudier la possibilité d'utiliser l'Oracle XML afin d'importer/exporter des données dans ma base de données (Oracle 10g2).

J'ai enregistré mes schémas xsd en base de données de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
BEGIN
  DBMS_XMLSCHEMA.registerSchema(
    SCHEMAURL => 'test.xsd',
    SCHEMADOC => bfilename('XSD_DIR','test.xsd')
  );
END;
/
Sans aucun problème...

Puis j'ai voulu insérer en base un fichier xml validé par ce xsd.
J'ai fait donc de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
insert into "T_MaTable" values
(XMLTYPE(bfilename('XML_DIR','test.xml'),
nls_charset_id('AL32UTF8')));
Et là j'ai une erreur de ce type :
Error starting at line 1 in command:
insert into "T_MaTable" values (XMLTYPE(bfilename('XML_DIR','test.xml'),nls_charset_id('AL32UTF8')))
Error report:
SQL Error: ORA-30992: une erreur s'est produite sur le Xpath /CompteRenduSecurite/DateHeure
ORA-01830: Le modele du format de date se termine avant la conversion de la chaine d'entree entiere
30992. 00000 - "error occurred at Xpath %s"
*Cause:
*Action: See the following error and take appropriate action.
Dans mon fichier xml les dates sont écrites de cette manière au format UTC (élément de type xsdateTime dans le fichier xsd):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<DateHeure>2009-03-03T08:39:00</DateHeure>
J'ai voulu voir mon paramétrage en base via la requête suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select * from v$nls_parameters;
NLS_LANGUAGE FRENCH
NLS_TERRITORY FRANCE
NLS_CURRENCY €
NLS_ISO_CURRENCY FRANCE
NLS_NUMERIC_CHARACTERS ,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE FRENCH
NLS_CHARACTERSET WE8ISO8859P15
NLS_SORT FRENCH
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY €
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
En me référant à la valeur du paramètre NLS_DATE_FORMAT, j'ai modifié ma valeur de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<DateHeure>03/03/09</DateHeure>
Et là mon xml est correctement inséré en base mais "03/03/09" comme DateTime on a déjà vu mieux .

J'ai donc décidé de modifier le paramètre NLS_DATE_FORMAT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY-MM-DD"T"HH24:MI:SS';
J'obtiens l'erreur suivante:
Error starting at line 4 in command:
insert into "T_MaTable" values (XMLTYPE(bfilename('XML_DIR','test.xml'),nls_charset_id('AL32UTF8')))
Error report:
SQL Error: ORA-01830: Le modele du format de date se termine avant la conversion de la chaine d'entree entiere
01830. 00000 - "date format picture ends before converting entire input string"
*Cause:
*Action:
Et là je patauge... je ne sais comment résoudre le problème étant donnée que je ne peux modifier en aucun cas le format des dates dans le fichier et si possible conserver la même simplicité d'insertion des données en base. Est ce possible?

Merci !