Bonjour,

Compètement nouveau sur oracle (mais avec qqs bases de SQL) j'ai besoin de votre aide pour commencer ...

Je travaille pour l'instant sur une oracleXE 10 G sous windows, en attendant la mise en place d'un serveur de prod.

J'ai besoin de générer un fichier texte issue de plusieurs tables générable seulement en PL/SQL

Q1 - donc je ne peux pas utiliser la commande SPOOL et SPOOL OFF, est ce exact ?


Ce fichier va attendre rapidement des gros volumes

Q2 - donc je dois utiliser
le package UTL_FILE, est-ce correct ?


J'ai récupéré ici http://gbriard.club.fr/technique/5.htm une procédure qui permet de tester ce package, mais j'ai de soucis avec ...

J'ai modifié le fichier init.ora pour ajouter

Le code suivant est sauvé dans le fichier test_utl_file.sql

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
    --
    -- Test du package UTL_FILE
    --
    CREATE OR REPLACE PROCEDURE Test_util_file IS
      ref_fichier UTL_FILE.FILE_TYPE;
    BEGIN
      ref_fichier := UTL_FILE.FOPEN('d:\test','resultat.txt','w');
      UTL_FILE.PUT_LINE(ref_fichier,'Première ligne...');
      UTL_FILE.PUT_LINE(ref_fichier,'C''est fini...');
      UTL_FILE.FFLUSH(ref_fichier);
      UTL_FILE.FCLOSE(ref_fichier);
    EXCEPTION
      -- traitement des erreurs rencontrees
      WHEN NO_DATA_FOUND THEN
          DBMS_OUTPUT.PUT_LINE ('Pas de donnée trouvée.');
          UTL_FILE.FCLOSE(ref_fichier);
      WHEN UTL_FILE.INVALID_PATH THEN 
          DBMS_OUTPUT.PUT_LINE ('UTL_FILE.INVALID_PATH invalide.');
          UTL_FILE.FCLOSE(ref_fichier);
      WHEN UTL_FILE.READ_ERROR THEN 
          DBMS_OUTPUT.PUT_LINE ('UTL_FILE.READ_ERROR invlide.');
          UTL_FILE.FCLOSE(ref_fichier);
      WHEN UTL_FILE.WRITE_ERROR THEN 
          DBMS_OUTPUT.PUT_LINE ('UTL_FILE.WRITE_ERROR invalide.');
          UTL_FILE.FCLOSE(ref_fichier);
      WHEN OTHERS THEN 
          DBMS_OUTPUT.PUT_LINE ('Autre erreur.');
          UTL_FILE.FCLOSE(ref_fichier);
    END; -- fin de la procedure
        -- le signe / execute la procedure sous SQL*Plus
    /
Lorsque je fait dans sql*plus
J'ai l'erreur suivante :
PLS-00201: l'identifiant test_utl_file doit être déclaré

Q3 - pourquoi ? La commande execute n'est elle pas capable de chercher le fichier test_utl_file ?


Depuis l'insterface web de oracleXE de colle le code de test_utl_file j'obtiens :
ERROR at line 0: PL/SQL/ Compilation unit analysis terminated


Q4 - Que cela signifie t'il ?
La procédure est bien crée, par contre elle est vide, ce qui est logique vue l'erreur rencontré ...

Je suis désolé pour toutes ces questions basiques, mais leur réponses (surtout pour la 3 et la 4) me permettront d'avancer avec les support pl/sql que j'ai pu récupérer ici et ailleurs.

D'avance merci