Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 27/01/2011, 11h24   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 31
Points : 9
Points : 9
Par défaut Affichage de texte en SQL et PL/SQL

Bonjour,

Je souhaite effectuer un affichage de résultats de compteurs dans un fichier de log en sortie.

L'idée est la suivante:

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- SAT_FEU
-- Verifier le nombre d’enregistrements de la table SAT_FEU par rapport a la table SIG_RECO05
DECLARE
  cpt1 number;
  cpt2 number;
  l_nomtab1 CPT_PURGE.NOMTABLE%TYPE:='SAT_FEU';
  l_nomtab2 CPT_PURGE.NOMTABLE%TYPE:='SIG_RECO05';
BEGIN
  -- Action souhaitee: suppression du fichier-resultat des compteurs (si c'est possible en SQL)
  -- rescpt.log
 
  EXECUTE IMMEDIATE ('SELECT count(*) FROM ') || lnomtab1 INTO cpt1;
  EXECUTE IMMEDIATE ('SELECT count(*) FROM ') || lnomtab2 INTO cpt2;
 
  -- Action souhaitee: affichage dans le fichier rescpt.log des resultats retournes (fichier a recreer car supprime avant operation de nettoyage)
  -- DISPLAY ou equivalent en SQL de:
  -- "Compteur AVANT purge" & lnomtab1 & " = " & cpt1 >> rescpt.log
  -- "Compteur AVANT purge" & lnomtab2 & " = " & cpt2 >> rescpt.log
  -- Return
 
END;
/

Mais je ne sais pas (et n'arrive pas à trouver) la syntaxe pour afficher de manière textuelle soit à l'écran ou soit dans un fichier de sortie (dans mon cas ce serait dans un fichier de log en sortie) les résultats retournés par les count(*).
J'ai essayé de retranscrire de manière claire ce que je souhaite programmer (les commentaires dans le code).

Merci pour votre aide.

Cdlt,
Olivier
Reivilo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 11h57   #2
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Bonjour,

regarde du côté de dbms_utl_file et sinon pour la sortie sur ecran dbms_output.
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 16h47   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 31
Points : 9
Points : 9
Alors j'ai essayé avec les remarques de Z3phur.
Ca donne ceci avec un essai d'écriture dans un fichier d'un texte sur 2 lignes :

Code sql :
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
33
34
35
36
37
 
-- Codes erreurs Oracle pour quitter le programme des la premiere erreur rencontree
WHENEVER SQLERROR EXIT 61
WHENEVER OSERROR  EXIT 62
 
SET SERVEROUTPUT ON
 
DECLARE
  file_handle UTL_FILE.FILE_TYPE;
  BEGIN
    file_handle := UTL_FILE.FOPEN('/data/13asr2/files/data/FICH/PURGE/SQL','Rescpt.log','w');
    DBMS_OUTPUT.PUT_LINE('Start essai');
    UTL_FILE.PUT_LINE(file_handle,'Bonjour chez Vous!');
    UTL_FILE.PUT_LINE(file_handle,'Nous sommes le ' || to_char(sysdate) || '.');
    UTL_FILE.FFLUSH(file_handle);
    UTL_FILE.FCLOSE(file_handle);
    DBMS_OUTPUT.PUT_LINE('Fin essai!');
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('No_data_found');
      UTL_FILE.FCLOSE(file_handle);
    WHEN UTL_FILE.INVALID_PATH THEN
      DBMS_OUTPUT.PUT_LINE('UTL_FILE.INVALID_PATH');
      UTL_FILE.FCLOSE(file_handle);
    WHEN UTL_FILE.READ_ERROR THEN
      DBMS_OUTPUT.PUT_LINE('UTL_FILE.READ_ERROR');
      UTL_FILE.FCLOSE(file_handle);
    WHEN UTL_FILE.WRITE_ERROR THEN
      DBMS_OUTPUT.PUT_LINE('UTL_FILE.WRITE_ERROR');
      UTL_FILE.FCLOSE(file_handle);
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Autres erreurs');
      UTL_FILE.FCLOSE(file_handle);
  END;
/
 
QUIT

J'ai le message d'erreur suivant :

Citation:
--------------------------------------------------------
UTL_FILE.INVALID_PATH

PL/SQL procedure successfully completed.
--------------------------------------------------------
Mon chemin est invalide, mais la procédure semble quand même s'exécuter de façon 'successfully' et je ne trouve nulle part mon fichier 'Rescpt.log'.

Si quelq'un a une idée, je suis preneur.

Merci.

Cdlt,
Olivier
Reivilo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h24   #4
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Bonjour,

regarde ce lien tu as la réponse à ton erreur :

http://psoug.org/reference/utl_file.html
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 18h01   #5
Invité régulier
 
Inscription : janvier 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 31
Points : 9
Points : 9
OK, merci pour le lien.

Si je comprends, en tant qu'Oracle je n'ai pas le droit d'écrire dans le chemin que je précise dans le script, c'est bien ça ?

Le hic, c'est que je n'évolue sur un poste en local, mais sur un serveur donc il faut que le fichier soit créé sur le serveur et là je ne suis pas maître des endroits où le déposer.

Bonne soirée.

Cdlt,
Olivier
Reivilo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 18h29   #6
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Tu peux créer un directory oracle qui pointe ou tu veux et donner le droit d écriture et lecture pour ton user sur directory.

Assure toi d avoir les bons droits au niveau système
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h55.


 
 
 
 
Partenaires

Hébergement Web