Comment faire pour modifier le jeu de caractères de la XMLTYPE variable?

Je suis actuellement en situation de non-utf-8 DB, mais j'ai besoin de produire XMLType variable avec l'encodage utf-8. Je vais avoir une solution de contournement, mais il semble y avoir un bug dans l'Oracle, voir le lien suivant:
https://forums.oracle.com/forums/thread.jspa?messageID=10238641

...et le Support d'Oracle bug: 7698684

Le bug causes aléatoires

ORA-1482: unsupported character set
ORA-6512: at "SYS.XMLTYPE", line 107

Tout d'abord, je suis XMLType avec dbms_xmlgen paquet. Que XMLType est codé avec DB jeu de caractères.

Pour le convertir en caractère utf-8, je fais comme ceci:

  • - Je convertir XMLType variable à GOUTTE variable avec getBlobVal méthode à l'aide de NLS_CHARSET_ID
    ('UTF8') en tant que paramètre
  • - Je convertir BLOB variable à XMLType avec XMLType méthode de constructeur, à l'aide de GOUTTE variable comme premier paramètre et NLS_CHARSET_ID
    ('UTF8') comme second paramètre. Ce qui provoque les erreurs aléatoires 🙁

Quelqu'un sait de toute solution de rechange pour cela?

  l_xml   := dbms_xmlgen.getXMLType(l_ctx);
  l_xml_b := l_xml.getBlobVal(C_UTF8_CHARSET_ID);
  l_xml   := XMLType(l_xml_b, C_UTF8_CHARSET_ID);
  • Où avez-vous trouvé la définition de XMLType.getBlobVal()? dans la documentation il n'est pas répertorié comme ayant un paramètre
  • Au moins, c'est écrit ici: docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb04cre.htm
  • Il semble être sans-papiers (probablement la documentation bug) mais vous avez raison, il fonctionne. Quelle version utilisez-vous?
  • Par le chemin je ne vais pas écrire une réponse maintenant puisque je n'ai pas de temps à chercher les références, mais je suis sûr d'une XMLType est abstraite et n'est pas un jeu de caractères (comme une DATE n'a pas un format). Le jeu de caractères est choisie quand vous transformez la XMLType en lisible et exportables au format.
  • 11g R2 (me souviens pas de version détaillée, mais peut vérifier demain). XMLType maintient propre jeu de caractères de l'information. Je suis absolument sûr parce que je suis de retour que XMLType variable à travers 11g natif de services web et si je fais de mon utf-8 coder des trucs alors faut-il vraiment expose service web avec l'encodage utf-8! Sinon, il renvoie simplement xml via un service web codé avec la DB jeu de caractères.
  • XMLType est la seule façon d'exposer les données de plus de varchar2 longueur max avec 11g natif de services web. Si j'utilise CLOB Oracle convertir implicitement à varchar2 🙂
  • Désolé, le DB n'est pas R2 c'est 11.1.0.7.0
  • XMLType constructeur avec BFILE semble fonctionner (id de jeu de caractères en tant que second paramètre)! Cependant, je ne veux pas écrire du code qui écrit xml sur le disque et le lit à l'arrière de xmltype. Trop compliqué je pense.
  • Vous êtes de nouveau à droite, j'ai vérifié dans les deux DBs avec différents jeux de caractères et le même XMLType avait codages différents. Vous ne pouvez pas utiliser CLOB de VARCHAR2 à l'exportation d'un XMLType parce que les deux types de données aura le jeu de caractères de la DB. Pourquoi n'utilisez-vous pas de BLOB? l_xml.getBlobVal(C_UTF8_CHARSET_ID) a le droit de définir le caractère et les informations d'en-tête.
  • BLOB ne peut pas être exposés à des services web. Je pense que je dois encoder des caractères de format Base64...