2010-04-08 8 views
5

J'appelle une fonction stockée comme ceci:oracle développeur SQL tronque mes résultats

select XML_INVOICE.GENERATE_XML_DOC('84200006823') from dual; 

Les résultats de la requête montrent alors dans une table en dessous, que je peux faire un clic droit et sélectionnez « Exporter les données » - > XML

<?xml version='1.0' encoding='UTF8' ?> 
<RESULTS> 
    <ROW> 
    <COLUMN NAME="XML_INVOICE.GENERATE_XML_DOC('84200006823')" <![CDATA[<xml>yada yada</xml><morexml>...]]></COLUMN> 
    </ROW> 
</RESULTS> 

le problème est le « ... » - développeur SQL (2.1.0.63 sous Linux) ne montre pas toutes les données - son tronquer le résultat et annexant les points de suspension. Cela ne me sert à rien. Comment puis-je l'obtenir pour exporter TOUTES mes données?

+0

je supprime mon répondez depuis que vous avez confirmé que le fichier enregistré contient "...". Je ne peux pas reproduire avec un appel similaire à une fonction intégrée qui produit une sortie longue. Juste pour être certain - si vous faites cela dans SQL * Plus (avec les paramètres SET appropriés) obtenez-vous également le même résultat? En outre, à partir du nom et de la méthode de la fonction, il semble que le résultat soit déjà en XML - pourquoi avez-vous besoin de le convertir à nouveau? – dpbradley

+0

Quelle est la taille du code XML complet. Pouvez-vous le poster ici (afin que nous puissions l'insérer dans un environnement et voir si nous pouvons reproduire) –

+0

le XML est 70kb. Je ne peux pas publier le XML depuis ses données client. En tout cas, le contenu réel du XML n'est pas pertinent - juste le fait qu'il est tronqué. – nont

Répondre

0

1) Introduire le résultat de la SP dans une table

select XML_INVOICE.GENERATE_XML_DOC ('84200006823') dans schéma.table du double;

(ne sera qu'une seule ligne)

Utilisez exp pour exporter la table

EXP nom d'utilisateur/mot de passe @ exemple TABLES = (tablename)

+0

Je voudrais essayer cela, mais je ne sais pas comment. N'ai-je pas besoin de créer la table en premier? quel devrait être le schéma de la table? et quelle est l'instance? Il me semble que c'est du côté serveur, auquel je n'ai pas accès. N'y at-il pas un moyen simple d'obtenir les résultats de cette requête?Je suppose que je pourrais écrire un programme entier pour obtenir les résultats d'une requête et l'écrire. * soupir * Mais ce n'est pas ce que le développeur SQL est pour? – nont

0

Une autre solution serait d'écrire directement un fichier XML voir exemple ci-dessous, et ajuster à:

CREATE OR REPLACE PROCEDURE output_xml_file 
(inFileName   Varchar2) --user defined prefix for file name   
AS 

      fp UTL_FILE.FILE_TYPE; 
       v_filename VARCHAR2(150); 
      v_XML_Result VARCHAR2(4000);  

BEGIN 

      v_filename:=infilename||'.xml'; 

      fp := UTL_FILE.FOPEN('c:\pathtofolder', v_filename, 'W', 4000); 

      select XML_INVOICE.GENERATE_XML_DOC(inFileName) into v_XML_Result from dual; 

      UTL_FILE.PUT_LINE(fp, v_XML_Result); 
      UTL_FILE.FCLOSE(fp); 

      EXCEPTION 

      WHEN OTHERS THEN 

       UTL_FILE.FCLOSE(fp); 
       raise; 
    END output_xml_file; 
    /
    SHOW ERRORS; 
    GRANT EXECUTE ON output_xml_file TO PUBLIC; 
+0

J'apprécie votre réponse. Cependant, ce code crée un fichier sur le serveur! Les administrateurs de base de données ne prennent pas cela à bras le corps, et d'ailleurs, ils n'accordent pas aux "simples" développeurs l'accès à la lecture de fichiers sur le serveur Oracle. Donc, cela ne m'aide pas beaucoup. – nont

-1

Exécuter en tant que script (F5) plutôt que comme une déclaration (Ctrl + en ter)

La sortie se rendra ensuite à la fenêtre de sortie de script plutôt que la sortie de la requête, et vous serez en mesure de copier et la coller

+0

merci pour votre réponse. Je suppose que je ne suis pas content de ce problème - j'ai changé de poste depuis que cela s'est produit, et nous n'utilisons même pas Oracle ici, donc je n'ai aucun moyen de le tester! Mais vous obtenez un upvote de moi parce que cela semble raisonnable. – nont

+4

Cela ne fonctionne pas. J'ai le même problème pour 'SÉLECTIONNER le texte FROM all_views OERE view_name = 'xxx'' pour une vue complexe Je dois faire de l'ingénierie inverse. La sortie avec F5 est tronquée encore pire. – SAJ14SAJ

5

j'avais le même problème dans SQL Developer 4. Voici ce que travaillé pour moi:

set long 100000; 
set longchunksize 100000; 

Puis réexécutez la requête. Vous devriez maintenant être en mesure de voir la cellule complète dans la vue de la grille et l'exporter vers csv.

(Le PO est plus avec le même emploi ou en utilisant Oracle, mais cette question est l'un des premiers résultats dans Google, nous espérons que cela aidera les gens à avoir le même problème.)

Questions connexes