IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Génération d'un fichier à l'aide de SQL*Plus et print


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 77
    Points
    77
    Par défaut Génération d'un fichier à l'aide de SQL*Plus et print
    Bonjour à toutes et tous,

    Je bute sur un problème relativement simple, mais je n'arrive pas à trouver la solution. J'utilise SQL+ dans un shellscript Unix afin de générer des fichiers EDI. Voici le code utilisé :

    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
    33
    34
    35
    36
    37
    38
    39
    40
     
    sqlplus -S usr/pswd@$serv<<!>>${chem_log}${fich_log}
     
      WHENEVER SQLERROR EXIT 1; 
      WHENEVER OSERROR EXIT 2;
     
    SET SERVEROUTPUT ON SIZE 1000000
    SET LINESIZE 500 
    SET ECHO OFF
    SET FEED OFF
    SET HEADING OFF
    SET HEAD OFF
    SET NEWPAGE NONE
    SET PAGESIZE 0
    SET TRIMSPOOL ON
    SPOOL /mondossier/monfichier
    var vdata refcursor
     
    DECLARE 
    vlignes number;
     
    BEGIN
      --on verifie si on doit lancer la requete ou non
      select count(*) into vlignes
      from   matable
      where  statut = 7;
     
      --On extrait les donnees de la table contenant resultat si on a trouve des lignes
      if (vlignes>0) then
         Ma_procedure_SQL(:vdata);     
         delete matable where statut = 7;    
      else
         select * from dummy; -- on genere une erreur pour quitter avec code erreur 3 et gerer dans shellscript
      end if;   
    END;
    /
    print vdata;
    spool off
    quit
    !
    Dans un premier temps je vérifie s'il y a des enregistrements dans matable avec le statut=7, si oui on exécute Ma_procedure_SQL(:vdata) dont le résultat est récupéré dans vdata qui est un ref cursor.

    Tant que j'ai des lignes, cela se passe bien, mais si vdata est vide ou null, la fonction PRINT génère une erreur.

    Ma question est donc la suivante, y a-t-il un moyen de tester vdata juste avant print afin d'éviter la génération d'une erreur? Ou peut-on passer un paramètre à PRINT afin que la fonction ne prenne pas en compte vdata lorsqu'il est vide?

    Actuellement je génère volontairement une erreur pour récupérer le code erreur dans le shellscript et traiter en fonction (mais je ne trouve pas cela très élégant ). Le code erreur est bien généré, mais je retrouve toujours mon erreur liée à PRINT.

    D'avance merci.

    Bonne journée.

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Ca doit le faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    col pvalue NEW_V pvalue
    select nvl(:vdata,' data is null ') from sys.dual;
     
    print pvalue

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Ouvrez aussi un curseur quand il n'y a pas de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open :vdata for select * from dual where 1 = 2;
    Mais à votre place je supprimerais tout simplement la partie "vérifiez que des lignes existent et si oui alors faire ça sinon faire ci".

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Merci pour vos réponses, la solution de mnitu était la bonne , en effet le curseur n'était pas ouvert. Maintenant le script fonctionne et pas besoin de générer d'erreur. En procédant de la manière suivante pas de fichier lst généré, donc pas de pb.

    Concernant la solution de ojo77, celle-ci ne me satisfaisait pas car cela générait un fichier avec 'data is null' dedans.

    Encore merci à vous deux et à bientôt.


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 77
    Points
    77
    Par défaut
    Petite correction, un fichier lst est bien créé, mais celui-ci est vide, mais du coup on peut aisément le tester dans le shellscript à l'aide de test -s.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Génération d'un fichier à partir de PL/SQL
    Par happymiss dans le forum PL/SQL
    Réponses: 3
    Dernier message: 29/08/2012, 14h35
  2. SP2-0172 et SP2-0171 : Fichier aide SQL Plus
    Par loupin dans le forum Oracle
    Réponses: 2
    Dernier message: 12/12/2006, 11h38
  3. [PL/SQL]Génération de fichier plat en PL SQL
    Par Fiora dans le forum Oracle
    Réponses: 2
    Dernier message: 31/03/2006, 14h23
  4. Génération de fichier d'aide
    Par BOSSANT dans le forum Windows
    Réponses: 4
    Dernier message: 26/01/2006, 12h07
  5. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo