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

Sql*Plus Oracle Discussion :

Résultat d'un select entrecoupé de lignes vides


Sujet :

Sql*Plus Oracle

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut Résultat d'un select entrecoupé de lignes vides
    Alors, je développe un petit script SQL (appelé par un script shell) qui me fait un select d'une table et renvoie le résultat dans un fichier en spool. Chaque enregistrement de la table tient sur une ligne, les champs étant séparés par des ';'. Voilà un extrait du code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    /* Definition des variables globales                               */
    define G_FICSPOOL = &1
    define G_DATE = &2
     
    /* Supprime le defilement des commandes d'un fichier de commandes */
      set ECHO    OFF
     
    /* Lors de la redefinition de variables d'environnement de SQLPLUS, supprime */
    /* l'affichage de l'ancienne, puis de la nouvelle valeur                     */
    /* exemple :                                                                 */
    /*    si showmode = ON                                                       */
    /*       SQL> set pagesize 5                                                 */
    /*       old: pagesize 3                                                     */
    /*       new: pagesize 5                                                     */
      set SHOWMODE    OFF
     
    /* Supprime l'affichage du text d'une commande avant et apres la substitution */
    /* des variables par leur valeur                                              */
      set VERIFY  OFF
     
    /* Supprime l'affichage du nombre d'enregistrements selectionnes */
      set FEEDBACK    OFF
     
    /* Utilise l'espace pour le caractere "blanc" dans le resultat */
      set TAB     OFF
     
    /* Supprime les separations (espace) entre les colonnes */
      set SPACE    0
     
    /* Supprime l'affichage a l'ecran du resultat des commandes executees a */
    /* partir d'un fichier                                                         */
      set TERMOUT     OFF
     
     
    /* Supprime toutes les informations de formattages des donnees en sortie */
      set PAGESIZE    0
     
    /* Definit la longueur de la ligne */
    set LINESIZE    1068
     
    /* DEBUT    */
     
    spool &G_FICSPOOL
     
    -- select des donnees de l'annee precedente
    SELECT CANLCODE || ';' ||
        PRODCODE || ';' ||
        to_char (MTR1MOIS, 'DD/MM/YYYY') || ';' ||
        OPERCOD1 || ';' ||
        CMCCCOD1 || ';' ||
        MTR1OTY1 || ';' ||
        OPERCOD2 || ';' ||
        MTR1OTY2 || ';' ||
        CMCCCOD2 || ';' ||
        TTECCDTS || ';' ||
        VTECCDTS || ';' ||
        TTECCDSS || ';' ||
        VTECCDSS || ';' ||
        MTR1MSGE || ';' ||
        MTR1IMGE || ';' ||
        MTR1KOGE || ';' ||
        MTR1IKGE || ';' ||
        MTR1MSGR || ';' ||
        MTR1IMGR || ';' ||
        MTR1KOGR || ';' ||
        MTR1IKGR || ';' ||
        MTR1MSTC || ';' ||
        MTR1KOTC || ';' ||
        BIOPER1 || ';' ||
        BIOPER2
    FROM MTR1
    WHERE MTR1MOIS <= to_date ( to_char( to_number(&G_DATE)-1 ) , 'YYYY') ;
    Rien de bien compliqué quoi...
    Mais (hé oui il y a toujours un mais sinon j'aurai pas posté vous pouvez l'imaginer) j'obtiens le résultat avec 6 lignes vides entre deux enregistrements. Un peu génant sur une table de plus de 5 millions...
    Extrait du résultat :
    10 ; SS7 ; 01/01/2004 ; INT ; 20404 ; ; INT ; ; 27801 ; TS ; SMSINT ; SS ; STD ; 0 ; ; 0 ; ; 0 ; ; 0 ; ; 23 ; 1 ; ;






    10 ; SS7 ; 01/01/2004 ; INT ; 20404 ; ; INT ; ; 28001 ; TS ; (X)UDT ; SS ; STD ; 0 ; ; 0 ; ; 0 ; ; 0 ; ; 257 ; 12 ; ;
    Okay, ben si vous pouvez m'aider je vous remercie, si vous pouvez pas je vous remercie quand même d'avoir essayé :]

    PS : BIOPER est un char(1) donc ce n'est pas ce champ qui déborde.
    Le script SQL est déroulé via sqlplus
    PS2 : mince, je m'y paume avec tous ces sous-forums ^^'

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Par défaut
    Citation Envoyé par Efilon Voir le message
    Mais (hé oui il y a toujours un mais sinon j'aurai pas posté vous pouvez l'imaginer) j'obtiens le résultat avec 6 lignes vides entre deux enregistrements.
    Il suffit de retirer les lignes que tu ne veux pas dans la clause where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE condition1
    AND la_colonne_que_je_ne_veux_pas_vide is not null
    Mais je pense que ton problème est un problème d'affichage (car au moins la colonne MTR1MOIS ne peut pas être null sinon elle ne serait pas sélectionnée par la clause where actuelle).
    Je pense que l'impression de ligne blanche vient du set linesize qui rajoute des blancs à la fin des ligne.
    Essaye un

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut
    Comme tu le supposais, c'était à cause du linesize : en le réduisant à la largeur du terminal ca tient sur une ligne.
    Cependant je vais plutôt suivre ton conseil et mettre un trimspool on en mettant un linesize de taille supérieure à la somme de la taille des champs (cette somme équivalant quasiment à la largeur du terminal, réduire le linesize pourrait marcher mais au cas où les données de la table seraient modifiées le trimspool permettra l'adaptation du code).

    Bref, je te remercie pour cette réponse et te souhaite une bonne journée :]

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

Discussions similaires

  1. [Toutes versions] Ajouter un ligne de résultat à une requête SELECT
    Par damsmut dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/11/2010, 15h01
  2. [MySQL] Résultat d'un select séparé par une ligne
    Par ecolom dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/05/2010, 23h32
  3. Réponses: 5
    Dernier message: 08/03/2010, 14h09
  4. Résultat de SELECT dépasse une ligne
    Par Marie56 dans le forum AS/400
    Réponses: 4
    Dernier message: 05/02/2009, 15h44
  5. Résultat de boucle <select> sur 2 lignes
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/09/2006, 09h31

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