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 :

Comment utiliser une variable dans la clause select ?


Sujet :

DB2

  1. #1
    Candidat au Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Comment utiliser une variable dans la clause select ?
    Bonjour,
    Comment utiliser une variable dans la clause select
    Je voudrais pouvoir faire la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tabLe1 (champ1,champ2) SELECT champ, variable FROM table2;
    mais cette requete échoue en DB2 a cause de la variable

    J'ai testé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 1 FROM SYSIBM.SYSDUMMY1;
    qui fonctionne avec une valeur

    Mais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE XX INTEGER;             
    SET XX=1;                       
    SELECT XX FROM SYSIBM.SYSDUMMY1;
    Échoue à la ligne 3


    Comment faire pour utiliser une variable dans le select en DB2

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Bonjour, tu es dans quel langage (et environnement d'exécution) ? Tu essaies de faire une procédure stockée SQL ?
    Par exemple en COBOL il faut mettre ":" devant ta variable (dans une instruction EXEC SQL).
    As-tu essayé de créer une table temporaire plutôt que l'instruction select (qui nécessite une sortie pour être utilisée) ?
    Si tu fais SET XX = (SELECT 1 FROM SYSIBM.SYSDUMMY1) as-tu toujours l'erreur ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    En fait j'essaye de créer une procédure stockée dans laquelle plusieurs enregistrement sont ajoutés a une table par une requête INSERT .... SELECT , qui reprend plusieurs champs de la table source ainsi que la valeur d'une variable préalablement initialisée).
    Mais apparemment la partie select ne fonctionne déjà pas

    De façon simplifiée, j'ai une table DOC comme suit
    Key, DOSSIER, CLIENT
    1, ASD125, DUPONT
    2, ZDE456, BINET

    et une table ARCHIVE comme suit
    Key, DOSSIER, DATE

    Je veux faire ceci:

    DECLARE ARCHIVAGE DATE;
    SET ARCHIVAGE = "2018-12-14";
    INSERT INTO ARCHIVE (DOSSIER, DATE) SELECT DOSSIER, ARCHIVAGE FROM DOC WHERE CLIENT='DUPONT';

    En fait le problème viens de la variable ARCHIVAGE , le message suivant est affiché

    Query execution failed

    Reason:
    SQL Error [42601]: An unexpected token "DOC" was found following "". Expected tokens may include: "

    SELECT SOSSIER, ARCHIVAGE FROM".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.19.26

  4. #4
    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,

    si je comprends bien une des valeurs est une variable locale l'autre une donnée issue d'une table. Personnellement j'aurais essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO ARCHIVE (DOSSIER, DATE) 
     VALUES (
      (SELECT DOSSIER FROM DOC WHERE CLIENT='DUPONT'),
       ARCHIVAGE
                 );
    @+

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Citation Envoyé par jhoubart Voir le message
    En fait j'essaye de créer une procédure stockée dans laquelle plusieurs enregistrement sont ajoutés a une table par une requête INSERT .... SELECT , qui reprend plusieurs champs de la table source ainsi que la valeur d'une variable préalablement initialisée).
    Mais apparemment la partie select ne fonctionne déjà pas

    De façon simplifiée, j'ai une table DOC comme suit
    Key, DOSSIER, CLIENT
    1, ASD125, DUPONT
    2, ZDE456, BINET

    et une table ARCHIVE comme suit
    Key, DOSSIER, DATE

    Je veux faire ceci:

    DECLARE ARCHIVAGE DATE;
    SET ARCHIVAGE = "2018-12-14";
    INSERT INTO ARCHIVE (DOSSIER, DATE) SELECT DOSSIER, ARCHIVAGE FROM DOC WHERE CLIENT='DUPONT';

    En fait le problème viens de la variable ARCHIVAGE , le message suivant est affiché
    Peut être que l'erreur vient des doubles "quote" sur l'instruction set ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Darkzinus Voir le message
    Peut être que l'erreur vient des doubles "quote" sur l'instruction set ?
    Même avec une variable numérique ( sans doubles "quote") cela ne fonctionne pas.

  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 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,
    Citation Envoyé par jhoubart Voir le message
    Je veux faire ceci:

    DECLARE ARCHIVAGE DATE;
    SET ARCHIVAGE = "2018-12-14";
    INSERT INTO ARCHIVE (DOSSIER, DATE) SELECT DOSSIER, ARCHIVAGE FROM DOC WHERE CLIENT='DUPONT';
    Il ne sert à rien de déclarer une variable puisque vous utilisez la colonne "ARCHIVAGE" récupérée par le SELECT sur la table "DOC"...
    Donc
    • soit vous voulez affecter la valeur de la colonne DOC.ARCHIVAGE à la colonne ARCHIVE.DATE auquel cas nul besoin de variable
    • soit vous voulez affecter la valeur d'une variable alimentée lors de l'appel à la procédure, auquel cas il faut déclarer une variable entrante de type date


    Note : utiliser un nom réservé comme "DATE" pour nommer une colonne n'est pas recommandé...

Discussions similaires

  1. comment utiliser une variable dans ce type d'écriture [A5:M&"j"]
    Par nouveauvba dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/04/2017, 16h28
  2. Réponses: 4
    Dernier message: 25/03/2015, 00h12
  3. comment utiliser une variable dans MySQL
    Par lecaire dans le forum Débuter
    Réponses: 6
    Dernier message: 17/08/2009, 22h57
  4. Réponses: 2
    Dernier message: 22/08/2006, 11h28
  5. Réponses: 5
    Dernier message: 04/05/2006, 21h02

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