Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Import/Export
Import/Export Forum d'entraide sur les outils d'import/export Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2010, 14h02   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 22
Points : 4
Points : 4
Par défaut encoding UTF-8 avec XMLelement

Bonjour,

j'ai voulut me créer une petite procédure PL/SQL pour générer quotidiennement des données sous format XML.

Cela fonctionne magnifiquement ... si ce n'est la balise d'entête qui malgrès mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  SELECT XMLROOT (
	XMLELEMENT ( "ROOT"
		,XMLELEMENT ( "regions"
			,XMLELEMENT ( "region"  , XMLATTRIBUTES ( ls_region AS "name" ) 
				,XMLELEMENT ( "patient_all" 
					,XMLAGG	(XMLELEMENT ( "patient"
								,XMLELEMENT ( "FAY_SEQ_NO",a)
								,XMLELEMENT ( "REF_NO",b)
								,XMLELEMENT ( "NAT",c)
								,XMLELEMENT ( "Nom",d)
								,XMLELEMENT ( "PRENOM",e)
								,XMLELEMENT ( "DAT_NAISSANCE",f)
								,XMLELEMENT ( "SEX",g)
								,XMLELEMENT ( "PHONE_NO",h)
								,XMLELEMENT ( "GSM",i)
								,XMLELEMENT ( "POURCENT_HANDIC",j)
								,XMLELEMENT ( "BIM",k)
								,XMLELEMENT ( "STT_SEQ_NO",l)
								,XMLELEMENT ( "HOUSE_NO",m)
								,XMLELEMENT ( "BOX",n)
								,XMLELEMENT ( "COMMUNE",o)
								,XMLELEMENT ( "CP",p)
								,XMLELEMENT ( "PAYS",q)
								,XMLELEMENT ( "MUT_SEQ_NO",r)
								,XMLELEMENT ( "MUTUELLE",s)
								,XMLELEMENT ( "DOC_SEQ_NO",t)
								,XMLELEMENT ( "SERV_SEQ_NO",u)
								,XMLELEMENT ( "SERVICE",v)
								)
							)
					)
				)
			)
			,XMLELEMENT ( "streets_all"	
				,XMLAGG	(XMLELEMENT ( "street"
							,XMLELEMENT ( "STREET_SEQ_NO",aa)
							,XMLELEMENT ( "NOM_RUE",bb)
							,XMLELEMENT ( "COMMUNE_SEQ_NO",cc)
									)
						)
						)
				), version '1.0" encoding="UTF-8'
 )
  INTO   lv_xml
FROM tmp_new_pat;
La balise du résultat obtenu est
Code :
<?xml version="1.0" encoding="US-ASCII" ?>
et cela reste quelque soit ce que je stipule dans la version.

J'ai finallement généré mon fichier par un autre biais, mais si quelqu'un pouvait m'expliquer le POURQUOI afin que je ne meures pas complètement idiot, cela me ferai plaisir.
bockstael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h59   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 683
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 683
Points : 10 460
Points : 10 460
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous êtes sûr de ne pas avoir un retraitement derrière, car c'est vraiment du texte libre :
Code :
1
2
3
4
5
SELECT XMLRoot(XMLElement("Dummy", dummy), version 'j''écris ce que je veux') AS tt
  FROM dual;
 
<?xml version="j'écris ce que je veux"?>
<Dummy>X</Dummy>
Sinon intéressez-vous à la fonction XMLForest, vous pourrez réduire significativement la longueur de votre code.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h26   #3
Invité de passage
 
Inscription : décembre 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 22
Points : 4
Points : 4
N'étant pas (et de loin) un spécialiste de l'XML, je me suis inspiré d'un exemple trouvé sur internet.

La suite du code est la suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  lv_blob := XMLTYPE.GetBlobVal ( lv_xml , 1 );
  lv_len := DBMS_LOB.GetLength ( lv_blob );
  lv_x := lv_len;
  lv_output := UTL_FILE.FOpen ( 'C:\FICHIERS_XML' , ls_filename , 'WB' , 32760 );  --WB = Write Byte mode
 
  IF lv_len < 32760
  THEN
    UTL_FILE.Put_Raw ( lv_output , lv_blob );
    UTL_FILE.FFlush ( lv_output );
  ELSE
    lv_start := 1;
    WHILE lv_start < lv_len
    LOOP
      DBMS_LOB.READ ( lv_blob , lv_byte_len , lv_start , lv_raw );
      UTL_FILE.Put_Raw ( lv_output , lv_raw );
      UTL_FILE.FFlush ( lv_output );
      lv_start := lv_start + lv_byte_len;
      lv_x := lv_x - lv_byte_len;
      IF lv_x < 32760 THEN
        lv_byte_len := lv_x;
      END IF;
    END LOOP;
  END IF;
  UTL_FILE.FClose ( lv_output );
 
END;


Citation:
Vous êtes sûr de ne pas avoir un retraitement derrière, car c'est vraiment du texte libre :
en effet, j'ai essayé avec une version 'TOTO' mais j'ai obtenu le même résultat.

Ce que vous dites est judicieux: il doit y avoir un traitement derrière. Mais où?
bockstael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h42.


 
 
 
 
Partenaires

Hébergement Web