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 :

[AS400] Saut de ligne dans une generation de requete


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 38
    Par défaut [AS400] Saut de ligne dans une generation de requete
    Bonjour,
    j'ai fait une requete de génération de requete, mais elle me génère mes requetes sur une seule ligne. J'aimerais qu'elle me les génère sur plusieurs ligne.

    Illustration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
    'UPDATE table ' || 
    'SET champ1 = CHAR(1) ' || 
    ' WHERE champ2 = ' ||''''|| A.champ2 || '''' || 
    ' AND champ3 = ' ||''''|| A.champ3 || '''' || ';'
    FROM table A 
    GROUP BY A.champ2,A.champ3 
    WITH UR; 
     
    Se qui me génère :
    UPDATE table SET champ1 = CHAR(1) WHERE champ2 = 'valeur1.1' AND champ3 = 'valeur2.1';
    UPDATE table SET champ1 = CHAR(1) WHERE champ2 = 'valeur1.2' AND champ3 = 'valeur2.2';
    .........
    Moi j'aimerais qu'il me génère
    UPDATE table
    SET champ1 = CHAR(1)
    WHERE champ2 = 'valeur'
    AND champ3 = 'valeur';

    Auriez-vous une idée?
    Je vous en remercie par avance.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Par défaut
    Salut,

    Je présume que tu es sur un AS400 et que tu veux mettre le résultat dans un fichier source pour pouvoir l'éxecuter à partir de RUNSQLSTM et que ton problème est lié au dépassement des 80 caractères de SRCDTA du fichier source.
    Est-ce celà ????


    Pour info en V6R1, le RUNSQLSTM peut se baser sur un fichier de l'IFS, donc pas de limitation.
    Sinon, il te faudra passer pas une UDTF.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 38
    Par défaut
    Alors effectivement je suis sur gros systeme.
    En fait je n'ai pas de pb de dépassement, j'ai agrandis mon fichier donc pas de problème.
    en fait c'est plus pour une question d'esthetisme et je dois l'avouer de curiosité personnelle.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Par défaut
    Avec une requête DB2, je ne voies pas trop comment faire mais avec l'utilisation de 2-3 commandes MVS et l'utilisation d'un ou de fichiers intermédiaires cela doit être réalisable assez facilement...

  5. #5
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Juin 2008
    Messages : 154
    Par défaut
    Bonjour,

    Je pense que c'est possible de la manière qui suit.

    1/ Tu crées une table temporaire globale le temps de ta recherche, cette ttg contenant un identifiant avec un format à définir devant correspondre à un critère unique de ta table (pour pouvoir trier les lignes correctement) et une colonne contenant la requête d'update. Si tu n'as pas de colonne unique, il faudra en créer une en faisant des !! de plusieurs colonnes, le résultat devant être au format du ID de la ttg Ex : SELECT CAST(ID1!!ID2!!ID3 as CHAR(20)), ... Dans ce cas le ID de la ttg est en CHAR(20). Si tu dois concaténer des zones décimales, n'oublie pas le DIGITS.

    2/ Tu insères dans la ttg le résultat de ton SELECT, cad les UPDATE préformatés.

    3/ Tu relis ta ttg autant de fois que nécessaire, une première fois pour sélectionner les n premiers caractères, une 2ème fois les n suivants, je te laisse définir la valeur de chaque substr en fonction de la grosseur de tes champs. Au fur et à mesure des lectures de ttg (lié par union all), tu sélectionnes l'identifiant unique et un n° séquentiel pour pouvoir trier correctement les lignes en sortie.

    4/ Tu mets le résultat dans une nested table T que tu relis pour ne sélectionner que la ligne de code en triant sur l'identifiant et le n° séquentiel.

    5/ Tu supprimes la ttg.

    Non seulement, cela devrait répondre à ton besoin, mais en plus, si l'update préformaté fait plus de 72 octets, cela résoud ce souci supplémentaire.

    Salut.


    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
    CREATE GLOBAL TEMPORARY TABLE X.TOTO (ID Format à définir, LIGNE CHAR(200));
     
    INSERT INTO X.TOTO
    SELECT un ID unique de ta table,
    'UPDATE table ' ||
    'SET champ1 = CHAR(1) ' ||
    ' WHERE champ2 = ' ||''''|| A.champ2 || '''' ||
    ' AND champ3 = ' ||''''|| A.champ3 || '''' || ';'
    FROM table A
    GROUP BY A.champ2,A.champ3
    WITH UR;
     
    SELECT LIG FROM (
    SELECT ID, 1 AS NO, SUBSTR(LIGNE, 1, 15) AS LIG
    FROM X.TOTO
    UNION ALL
    SELECT ID, 2 AS NO, SUBSTR(LIGNE, 16, 20) AS LIG
    FROM X.TOTO
    UNION ALL
    SELECT ID, 3 AS NO, SUBSTR(LIGNE, 36, 18) AS LIG
    FROM X.TOTO
    UNION ALL
    SELECT ID, 4 AS NO, SUBSTR(LIGNE, 54, 22) AS LIG
    FROM X.TOTO
    ...
    ) AS T
    ORDER BY ID, NO
    ;
     
    DROP TABLE X.TOTO ;

Discussions similaires

  1. saut de ligne dans une MsgBox
    Par yoyoo dans le forum Access
    Réponses: 5
    Dernier message: 16/06/2006, 23h44
  2. Réponses: 9
    Dernier message: 29/03/2006, 16h40
  3. [AJAX] Saut de ligne dans une page html
    Par rapace dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/02/2006, 09h44
  4. Saut de ligne dans une bande d'une grille DevExpress
    Par xant dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/08/2005, 14h51
  5. Mettre une saut de ligne dans une balise alt
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 16/12/2004, 08h45

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