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

DB2 Discussion :

DSNTIAUL sans indicateurs de nullité en sortie ?


Sujet :

DB2

  1. #1
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut DSNTIAUL sans indicateurs de nullité en sortie ?
    Bonjour,

    J'utilise un DSNTIAUL avec PARM 'SQL' pour générer un fichier, et je cherche une solution pour ne pas avoir les indicateurs de nullité (X'00' ou X'6F' selon) que l'utilitaire positionne derrière les colonnes nullables ou calculées, et ce sans passer par un step supplémentaire bien sur

    Ceci avec DB2 for Z/OS version DSN11010

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Lemosi Fort et Vert
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lemosi Fort et Vert
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 34
    Points
    34
    Par défaut
    Bonjour Escartefigue, as tu essayé d'utiliser un substring ? De mémoire sur une donnée null type Varchar il renvoie une chaîne à space.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonsoir et merci pour cette réponse

    J'ai essayé plusieurs conversions, avec des substring, cast et autres fonctions, mais le problème persiste, je ne voudrai avoir que la colonne, sans aucun octet supplémentaire

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    IMHO, la fonction scalaire COALESCE devrait résoudre ton problème ...

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    J'avais tenté COALESCE sans plus de succès

  6. #6
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour

    pourtant COALESCE est la solution.

    a+

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut Quand la question est mal posée, la réponse ne peut pas convenir !
    Mea culpa, je rectifie
    Il y a 3 choses dans le fichier produit par DSNTIAUL, pour chaque colonne :
    - la valeur de la colonne
    - l'indicateur de nullité qui lui est bien supprimé avec la fonction COALESCE
    - 2 octets supplémentaires dont je voudrais également me débarrasser (contenant X'0001' ci-dessous)

    Exemple de requête 1 colonne decimal(5,0) nullable :

    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
    //EXSQL001 EXEC PGM=IKJEFT01,DYNAMNBR=20          
    //SYSTSPRT DD SYSOUT=*                            
    //SYSTSIN  DD *                                   
      DSN SYSTEM(DB2T)                                
      RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARM('SQL')
    /*                                                
    //SYSPRINT DD SYSOUT=*                            
    //SYSIN    DD *                                   
      SET CURRENT SCHEMA = 'TSR5'            
      ;                                      
      SELECT  MT04                           
            ,';'                             
            , COALESCE(MT04, 0)              
            ,';'                             
            , DIGITS(MT04)                   
            ,';'                             
            , CAST(DIGITS(MT04)  AS CHAR(10))
            ,';'                             
            , SUBSTR(DIGITS(MT04), 01, 05)   
            ,';'                             
      FROM   TAB0                            
      WITH CS                                
      ;
    Produit le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ......;........;00000...;00000     ...;00000...;
    0000005000000005FFFFF0005FFFFF444440005FFFFF0005
    00C001E00000C01E00000001E0000000000001E00000001E
     -----------------------------------------------
    ......;........;00030...;00030     ...;00030...;
    0000005000000005FFFFF0005FFFFF444440005FFFFF0005
    03C001E00003C01E00030001E0003000000001E00030001E
     -----------------------------------------------

  8. #8
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bon à savoir:
    1. ';' renvoi un varchar, donc à remplacer par char(';',1)
    2. pour concaténer les différentes colonnes, préfère CONCAT à la virgule. En final, une seule colonne de longueur en début de record final.
    3. pour ne plus avoir de colonne longueur, habille le tout d'un CHAR ou d'un substr. et dans ce cas, le 1) n'est plus inutile


    Pour produire un fichier csv, je préfère utiliser les outils à ma dispo (UNLOAD, INSYNC, fileaid, .. rexx..) qui permettent de gérer tout un tas de trucs (null, titres, signe, ...). UNLOAD est limité et n'est pas du SQL.

    A+

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour et merci pour ces précisions

    Dans les faits je ne crée pas un fichier CSV, je n'ai ajouté les ";" dans l'exemple communiqué que pour faciliter la lecture, la vraie requete n'en possède pas
    J'utilise DSNTIAUL car malheureusement, DSNUTILB est plus performant (environ 2 fois plus rapide) mais ne permet pas de requêtage

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Lemosi Fort et Vert
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lemosi Fort et Vert
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 34
    Points
    34
    Par défaut
    Bonjour à tous, DSNUTILB (Un composant de DSNUPROC) permet bien de faire du requêtage. La syntaxe reste cependant plus complexe que celle de DSNTIAUL.

    Syntaxe de l'UNLOAD (Pour le requêtage jetez un oeil à partir du descriptif de la clause WHEN):

    https://www.ibm.com/support/knowledg...oadsyntax.html

    Exemple de directives d'UNLOAD (Cf exemple 1):

    https://www.ibm.com/support/knowledg...adsamples.html

Discussions similaires

  1. Carte graphique avec sortie TV sans cable ?
    Par muad'dib dans le forum Périphériques
    Réponses: 3
    Dernier message: 14/07/2008, 11h45
  2. Gestion des erreurs entre sorties sans la STL
    Par Djobird dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/02/2007, 21h22
  3. Sortie standard stockée dans variable sans rc
    Par ggnore dans le forum Linux
    Réponses: 2
    Dernier message: 13/12/2005, 14h46
  4. Affectation du résultat d'une ps sans paramètre de sortie
    Par PERRIN38 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/08/2005, 15h43
  5. [LG] Exit sans sortie
    Par Belegkarnil dans le forum Langage
    Réponses: 1
    Dernier message: 28/06/2005, 10h49

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