J'ai une question à propos de la bobine des résultats de mon programme. Mon exemple de script SQL ressemble à ceci.
whenever sqlerror exit failure rollback set heading off set arraysize 1 set newpage 0 set pages 0 set feedback off set echo off set verify off declare ab varchar2(10) := 'Raj'; cd varchar2(10); a number := 10; c number; d number; begin c := a+10; select ab,c into cd,d from dual; end; SPOOL select cd,d from dual; SPOOL OFF EXIT;
4 Réponses :
Ceci aboutira à la sortie du bloc anonyme dans un fichier appelé espère qu'il aide ... p> EDIT: P> Après votre commentaire pour produire une valeur pour chaque itération de Un curseur (je réalise que chaque valeur sera la même dans cet exemple, mais vous devriez obtenir le gist de ce que je fais): p> Sortie_
Que se passe-t-il s'il y a un curseur dans le bloc et il boucle à l'intérieur du début. Comme 'boucle c: = a + 10; Sélectionnez C dans: D de Dual; boucle de fin; finir; Sélection de la bobine: D de Dual; Spool off; ' Ainsi, maintenant, cela donnera-t-il tous les résultats ou la sortie finale stockée dans: D. Comment aboutir s'il y a une boucle.
Vous pouvez utiliser dbms_output dans la boucle du curseur pour émettre la valeur à chaque itération du curseur. Voir Modifier ..
Salut Ollie, j'ai une autre question. Le code ci-dessus fonctionne bien lorsque je cours à partir de SQL * Plus. Mais j'ai un script shell qui invoque ce script SQL et aboutit la sortie au fichier texte. J'ai enregistré le script Shell dans Oracle Apps, et lorsque je soumettez une demande d'applications à exécuter. Il montre normalement et courir mais il n'est jamais terminé. Do, je dois apporter des modifications au script ci-dessus lorsque vous invoquez à partir d'un script shell.
Si vous l'exécutez à l'arrière-plan, je m'inquiéterais de l'endroit où vous vous attendez à ce que la sortie aille. Dans ces circonstances, vous serez peut-être mieux à utiliser le package UTL_FILE pour écrire la sortie dans un fichier directement à partir du bloc PL / SQL, vous pouvez ensuite lire ce fichier à l'aide de tout outil souhaité (PL / SQL, Java, UNIX, etc. ). C'est assez simple à faire et vous auriez moins de complexité que de la sortie de spooling via SQLPlus puis dans un script shell, etc. docs.oracle.com/cd/b19306_01/appdev.102/b14258/u_file.htm
Pour exécuter cela à partir d'un script dans SQL Plus (comme @ myscript.sql), j'ai dû ajouter "/" après la "fin"; du bloc anonyme.
Est-ce que quelqu'un a un exemple de spool super simple? Je veux juste exporter une seule table de ligne, mais je vais devoir faire cette même exportation plusieurs fois, alors j'aimerais ne pas utiliser (clic droit -> exporter ...) à chaque fois. Je ne trouve pas d'exemple qui n'implique pas plus de 30 lignes de code.
avec bobine:
Que se passe-t-il s'il y a un curseur dans le bloc et il boucle à l'intérieur du début. Comme 'boucle c: = a + 10; Sélectionnez C dans: D de Dual; boucle de fin; finir; Sélection de la bobine: D de Dual; Spool off; ' Ainsi, maintenant, cela donnera-t-il tous les résultats ou la sortie finale stockée dans: D. Comment aboutir s'il y a une boucle.
Ne fonctionnera pas de cette façon. Vous pouvez SPOOL SQL SELECTS, pas PL / SQL. Pour la sortie du code PL / SQL, vous pouvez utiliser DBMS_Output Package, car Ollie a indiqué.
Pour exécuter un fichier spool dans plsql Aller à File-> Nouvelle fenêtre de commande -> Collez votre code-> Exécuter. Je suis arrivé au répertoire et vous trouverez le fichier. P>
to spool à partir d'un commencer code>
fin code> bloc est assez simple. Par exemple, si vous devez résulter de la bobine de deux tables dans un fichier, utilisez simplement le
pour la boucle code>. Un exemple de code est indiqué ci-dessous.
BEGIN
FOR x IN
(
SELECT COLUMN1,COLUMN2 FROM TABLE1
UNION ALL
SELECT COLUMN1,COLUMN2 FROM TABLEB
)
LOOP
dbms_output.put_line(x.COLUMN1 || '|' || x.COLUMN2);
END LOOP;
END;
/