Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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/02/2008, 15h07   #1
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut DBMS_XMLSave.insertXML crée les lignes mais ne met pas les data

Bonjour,
Je travaille avec la version "Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production"

J'essaie de charger une table avec des données XML stockées dans un CLOB.

J'ai une table TEST définie comme ceci :
Code :
1
2
3
4
5
6
7
 
CREATE TABLE TEST
(
  FIELD1 VARCHAR2(5),
  FIELD2 VARCHAR2(5),
  FIELD3 VARCHAR2(5)
)
Lorsque j'exécute ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
DECLARE
  c CLOB := NULL;
  ctxtype DBMS_XMLSave.ctxType;
  LINES number;
BEGIN
-- create CLOB
  c:='<ROWSET><ROW><field1>1.1</field1><field2>1.2</field2><field3>1.3</field3></ROW><ROW><field1>2.1</field1><field2>2.2</field2><field3>2.3</field3></ROW><ROW><field1>3.1</field1><field2>3.2</field2><field3>3.3</field3></ROW></ROWSET>';
-- create CONTEXT
  ctxtype := DBMS_XMLSave.newContext('test');
-- Get result
  LINES := DBMS_XMLSave.insertXML(ctxtype, c);
-- close CONTEXT
  DBMS_XMLSave.closeContext(ctxtype);
-- Commit
  commit;
END;
tout se passe bien, je n'ai aucune erreur.

Mais lorsque je regarde le contenu de la table, je vois bien que 3 lignes ont été ajouté, mais que le contenu des champs est vide
Code :
1
2
3
4
5
 
SQL> SELECT * FROM test;
 
FIELD FIELD FIELD
----- ----- -----
Pourquoi ?

merci de votre aide.
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 15h18   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
je ne suis pas expert en CLOB, mais as-tu remarqué que tu cherches à stocker un CLOB dans un varchar2(5) ?
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 15h38   #3
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Citation:
Envoyé par Jerome_Mtl Voir le message
je ne suis pas expert en CLOB, mais as-tu remarqué que tu cherches à stocker un CLOB dans un varchar2(5) ?
Je n'ai pas du être assez clair.

Voici quelques explications supplémentaires, en espérant que cela va éclairer vos lanternes

le CLOB contient un XML :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<ROWSET>
<ROW>
<field1>1.1</field1>
<field2>1.2</field2>
<field3>1.3</field3>
</ROW>
<ROW>
<field1>2.1</field1>
<field2>2.2</field2>
<field3>2.3</field3>
</ROW>
<ROW>
<field1>3.1</field1>
<field2>3.2</field2>
<field3>3.3</field3>
</ROW>
</ROWSET>
En clair il défini 3 lignes. Je voudrais charger ses 3 lignes dans ma table test et avoir les données mises au bon endroit en fonction du <tag> du XML. Bref je cherche a charger "1.1", "1.2", ...,"3.2", "3.3" dans des VARCHAR2(5). Ce qui est suffisant étant donné que chaque valeur fait 3 caractères de long

Disons, pour faire simple, qu'une fois le code mis plus haut exécuté je voudrais que mon select donne ceci :
Code :
1
2
3
4
5
6
7
8
 
SQL> SELECT * FROM test;
 
FIELD FIELD FIELD
----- ----- -----
1.1    1.2    1.3 
2.1    2.2    2.3 
3.1    3.2    3.3
J'espère que c'est plus clair à présent
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 15h47   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
oups j'avais rien compris
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 16h31   #5
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut alors là...

.. il me semblait bien qu'il y avait trop peu de code que pour faire une erreur dans celui-ci.

La réponse : CASE !!!!

Bref si mon clob contient ceci :
c:='<ROWSET><ROW><FIELD1>1.1</FIELD1><FIELD2>1.2</FIELD2><FIELD3>1.3</FIELD3></ROW><ROW><FIELD1>2.1</FIELD1><FIELD2>2.2</FIELD2><FIELD3>2.3</FIELD3></ROW><ROW><FIELD1>3.1</FIELD1><FIELD2>3.2</FIELD2><FIELD3>3.3</FIELD3></ROW></ROWSET>';

Et ben j'ai l'effet escompté.

j'ai honte
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h24.


 
 
 
 
Partenaires

Hébergement Web