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 :

Variable dans INSERT into from


Sujet :

DB2

  1. #1
    Membre éclairé

    Homme Profil pro
    Retraite
    Inscrit en
    Octobre 2005
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraite
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 510
    Billets dans le blog
    1
    Par défaut Variable dans INSERT into from
    *Bonjour,*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "INSERT INTO TSTFCH.FRPFBLV "
    "SELECT RFCSTD,RFCCND,RFCDPO,RFCGIM,RFCPRD,"
    "VALUES (CAST(? AS double )<double> ,CAST(? AS double )<double> ),RFNUMC,RFQCND,RFZETQD,RFZETQF "
    "FROM TSTFCH.FRFDOM "
    "WHERE (RFNUMC=:xRFNUMC<double>)  "
    j'utilise OTL il fonctionne très bien mais je ne sais pas

    utiliser les cast je voudrais passer des variables

    merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Avec OTL, je ne connais pas la syntaxe exacte mais je pense que ça devrait être qqchose dans ce goût-là :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    STM = "INSERT INTO TSTFCH.FRPFBLV "
    "SELECT RFCSTD,RFCCND,RFCDPO,RFCGIM,RFCPRD,"
    "VALUES (CAST(? AS double )<double> ,CAST(? AS double )<double> ),RFNUMC,RFQCND,RFZETQD,RFZETQF "
    "FROM TSTFCH.FRFDOM "
    "WHERE (RFNUMC=RFNUMC<double>) "
     
    Execute :STM Using :VAR1, :VAR2, etc,. dans l'ordre des CASTS.

  3. #3
    Membre éclairé

    Homme Profil pro
    Retraite
    Inscrit en
    Octobre 2005
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraite
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 510
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Avec OTL, je ne connais pas la syntaxe exacte mais je pense que ça devrait être qqchose dans ce goût-là :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    STM = "INSERT INTO TSTFCH.FRPFBLV "
    "SELECT RFCSTD,RFCCND,RFCDPO,RFCGIM,RFCPRD,"
    "VALUES (CAST(? AS double )<double> ,CAST(? AS double )<double> ),RFNUMC,RFQCND,RFZETQD,RFZETQF "
    "FROM TSTFCH.FRFDOM "
    "WHERE (RFNUMC=RFNUMC<double>) "
     
    Execute :STM Using :VAR1, :VAR2, etc,. dans l'ordre des CASTS.

    bien déjà je suis sur la bonne voix

    strmdb_FRPFBLV<<xRF999M<<xRONBL<<xRFNUMC;

    mais il provque une erreur du style


    OTL TRACE ==> otl_exception, code=-104, msg=[IBM][Pilote ODBC System i
    > Access][D
    > B2 for i5/OS]SQL0104 - ElÚment syntaxique < n'est pas correct.
    > ElÚments possible

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Tu veux insérer dans DB2/i5 (AS400), n'est-ce pas ?

    Alors, supprimes les "<double>" superflus pour faire comme ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    STM = "INSERT INTO TSTFCH.FRPFBLV "
    "SELECT RFCSTD,RFCCND,RFCDPO,RFCGIM,RFCPRD,"
    "VALUES (CAST(? AS double ), CAST(? AS double ), RFNUMC, RFQCND, RFZETQD, RFZETQF )"
    "FROM TSTFCH.FRFDOM "
    "WHERE (RFNUMC=RFNUMC) "
    Le prédicat dans clause WHERE m'échappe un peu

  5. #5
    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
    Citation Envoyé par Mercure Voir le message
    Le prédicat dans clause WHERE m'échappe un peu
    Philippe,

    C'est courament utilisé, généralement.
    Mon prédicat préféré c'est WHERE 1=1.
    Ainsi quand on continue la fabrication de l'ordre SQL dynamique pas besoin de tester si c'est le premier AND que l'on va faire.
    Une clause WHERE ajoutée donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If not (par1 = *zeros);
    SMT += ' AND NUM=' +%trim(Par1);
    endif;

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Ok, oui, mais c'est un cas particulier, une ruse que j'ai en effet déjà employée dans les programmes, mais est-ce bien la raison pour laquelle l'OP JPLAROCHE a établi ce prédicat, ça ne saute pas aux yeux ?
    Enfin, là n'est pas l'essentiel. Attendons si tu veux de voir ce qu'il va nous dire.

  7. #7
    Membre éclairé

    Homme Profil pro
    Retraite
    Inscrit en
    Octobre 2005
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraite
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 510
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Ok, oui, mais c'est un cas particulier, une ruse que j'ai en effet déjà employée dans les programmes, mais est-ce bien la raison pour laquelle l'OP JPLAROCHE a établi ce prédicat, ça ne saute pas aux yeux ?
    Enfin, là n'est pas l'essentiel. Attendons si tu veux de voir ce qu'il va nous dire.
    d'abord merci a tous pour votre aide

    a) dans les DOC. IBM
    il est stipulé que le CAST est INTERDIT avec INSERT INTO FROM TABLE

    b) j'ai une parade autorisé mais peut si vous ne fait pas attention aux attributs
    des champs votre requête seras rejeté.

    c) j'ai eu aussi les concepteurs de OTL vos solutions convergeaient

    d) dommage car cela ouvraient des portes

    mon application porte

    sur une lecture avec une douchette ( d'ailleurs j'ai réécris le driver )
    puis encapsule dans des "map c++" et met à jour la base de donnée sur AS400 (stock suivi de BL ect....)



    voici ma solution

    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
    bool update_FRPFBLV()
    {
    
    try{
    wxSTRING wx_V;  // voir wxwidget 
     char * SQL_SMT ;
    SQL_SMT  =  (char*) malloc(4096);
    
    
    
    
    wx_V =  "INSERT INTO TSTFCH.FRPFBLV ";
    wx_V += "SELECT RFCSTD, RFCCND, RFCDPO, RFCGIM, RFCPRD, ";
    wx_V.Printf("%s%08.0f, %06.0f, ",wx_V.c_str(),xRO999M,xRONBL);  // ICI MON  PROBLEME
    wx_V += "RFNUMC, RFQCND, RFZETQD, RFZETQF ";
    wx_V += "FROM TSTFCH.FRFDOM WHERE (" ;
    wx_V += " RFZAPL=:xRFZAPL<char[10]> AND ";
    wx_V += " RFNUMC=:xRFNUMC<double> AND ";
    wx_V += " RFCPRD=:xRFCPRD<char[2]> AND ";
    wx_V += " RFCCND=:xRFCCND<char[2]> ) ";
    
    
    
    sprintf(SQL_SMT,"%s%",wx_V.c_str());
    
     // buffer size mettre 1 sinon pas de transaction (commit rollback) possible  exemple  entete detail x art et pied de Bon de livraison mon cas
    
    strmdb_FRPFBLV.open(1,
                  SQL_SMT  // est obligatoirement un *CHAR  ou une constante "..." 
                ,
                  db // connect object
                 );
      return true;
    
    } catch(otl_exception& p){ // intercept OTL exceptions 
    
    // fonction  interne au programme 
    F_Erreur(p,wxT("Erreur Fichier Write FRPFBLV  (5) appeler Service Informatique"));
    strmdb_FRPFBLV.clean(1); // rollback ODBC
      return false ;
     }
    }
    ........
    // mise a jour  
            strmdb_FRPFBLV<<Vn_ZAPL<<xRFNUMC<<xRFCPRD<<xRFCCND;

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

Discussions similaires

  1. Variable dans la clause from ?
    Par All Jinx dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/11/2006, 11h38
  2. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 18h57
  3. Syntaxe d'une variable boolean dans INSERT INTO en SQL
    Par frevale dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/05/2006, 19h26
  4. ajouter des dates délémitées dans INSERT INTO ?
    Par samlepiratepaddy dans le forum Access
    Réponses: 8
    Dernier message: 27/09/2005, 08h12
  5. insert into from select ?
    Par axel584 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 25/01/2005, 18h10

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