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

Cobol Discussion :

Cobol SQL et paramétrage


Sujet :

Cobol

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Cobol SQL et paramétrage
    Bonjour à tous,
    Voilà quelques mois que je consulte le forum (très pratique) sans m'y être inscrit mais là j'ai une petite question à vous soumettre...

    Voilà je ne suis pas trop callé en cobol sql et un soucis se pose à moi :
    Je travaille autour d'un progiciel entièrement paramétrable via des tables et suite à un nouveau projet je dois développer un programme permettant l'exécution de requête SQL. Jusque là pas de problème.
    Mais il faut que ces requêtes soit écrite dans une table et qu'un programme Cobol vienne appelé cette table et exécute les N requêtes de paramétré dans cette table.
    Donc pour résumé dans le programme j'appel ma table et charge la requête dans une variable et je dois exécuter cette variable via le EXEC SQL... j'espère être assez clair...
    Je ne vois pas du tout comment faire, si quelqu'un aurait une idée pour m'éclairer à ce sujet...

    Merci

  2. #2
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    C'est typiquement ce que l'on appelle faire du SQL dynamique.
    C'est un peu semblable à du SQL habituel mais avec en plus au moins un EXEC SQL DECLARE STMT STATEMENT End-EXEC
    , un EXEC SQL PREPARE STMT et un EXEC SQL EXECUTE STMT.
    Egalement un EXEC SQL OPEN et enfin un EXEC SQL CLOSE.
    Dans tous les cas il faut se mettre en contact avec les DBA du site qui doivent impérativement donner leur accord et pourront éventuellement proposer un exemple aux normes du site (pas forcément en cobol, mais la logique des appels SQL sera du même ordre, indépendamment du langage, COBOL ou autre.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    OK merci pour ta réponse, c'est vrai qu'un exemple concret aurait été parfait pour comprendre car je ne connais pas trop les fonctions que tu donnes...

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    ReBonjour,
    Après beaucoup de recherche Internet sur mon problème, j'ai enfin trouvé ma solution, je vous poste la partie de code, ca pourra peut être servir à certain :

    I
    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
    DENTIFICATION DIVISION.                               
           PROGRAM-ID.             TESTSQL.                       
           ENVIRONMENT DIVISION.                                  
           CONFIGURATION SECTION.                                 
           SOURCE-COMPUTER. IBM-AS400.                            
           OBJECT-COMPUTER. IBM-AS400.                            
                                                                  
           SPECIAL-NAMES.          SYSOUT IS SYS-LST.             
                                                                  
           DATA DIVISION.                                         
                                                                  
           WORKING-STORAGE SECTION.                               
                                                                  
           77  DSPSQLCODE          PIC ------99.                  
                                                                  
           77  STMT1               PIC X(100) VALUE               
               "DELETE FROM MYFILE WHERE MYFIELD < ""6126""".     
                                                                  
           77  STMT2               PIC X(100) VALUE               
               "DELETE FROM MYFILE2 WHERE MYFIELD2 = ""35""".     
                                                                  
           77  STMTSTRING          PIC X(100).                    
                                                                  
               EXEC SQL                                           
                  INCLUDE SQLCA                                   
               END-EXEC.                                          
                                                                  
                                                                  
           PROCEDURE DIVISION.                                    
           000-PROGRAM-START.                                     
                                                                  
               EXEC SQL                                           
                  WHENEVER SQLERROR GO TO 900-SQL-ERROR           
               END-EXEC.                                          
                                                                  
               MOVE STMT1  TO STMTSTRING.                         
               PERFORM 100-EXEC-SQL.                              
                                                                  
               MOVE STMT2  TO STMTSTRING.                         
               PERFORM 100-EXEC-SQL.                              
                                                                  
               GOBACK.                                            
                                                                  
           100-EXEC-SQL.                                          
               EXEC SQL                                           
                  EXECUTE IMMEDIATE :STMTSTRING                   
               END-EXEC.                                          
                                                                  
           900-SQL-ERROR.                                         
               MOVE SQLCODE TO DSPSQLCODE.                        
                                                                  
               DISPLAY "SQL ERROR - ERROR:" DSPSQLCODE "  STATE:" 
                                    SQLSTATE UPON SYS-LST.        
                                                                  
               GOBACK.
    Cependant, ma requête ne fonctionne pas pour la raison suivante :
    Je veux faire un UPDATE dans ma requête SQL et le "SQLCODE" me renvoi le code erreur suivant : -206 ce qui signifie apparement que la colonne précisée n'est pas une colonne de la table en mise à jour. Mais mes noms de colonne indiqués sont correct... quelqu'un aurait une idée?

  5. #5
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    a priori j'aurais tendance à penser que tu as un probleme au niveau du qualifieur de ta table DB2.
    tu ne la qualifies pas dans ton ordre DB2, ok. mais dans ce cas l'as tu bien créé avec le qualifieur par défaut qu'utilisera DB2 au moment du Bind dynamique?

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ola ola excuse moi mais je ne comprend pas tout ce que tu dis là...
    C'est quoi que tu appels "qualifieur"??


    PS : petite erreur de frappe, ce n'est pas un UPDATE mais un INSERT que je veux faire

  7. #7
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    "DELETE FROM ABCD.MYFILE WHERE MYFIELD < ""6126""".

    Si tu ne mets pas le qualifier de ta table c'est l'auth ID de l'owner du plan/package qui est utilisé.

    Je parle sous contrôle des personnes qui connaissent mieux que moi (reprenez moi si je dis une bêtise) : tu peux trouver le qualifier en récupérant le champ CREATOR de ta table (=NAME) en SYSTABLES

    .

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse mais après beaucoup de recherche sur le net, j'ai enfin trouvé la source à mon problème. Il s'agit d'un problème de journalisation du fichier.
    Plusieurs solutions étaient proposées mais voilà la plus simple et qui marche très bien
    Il suffit de paramétrer le COMMIT à *NONE :
    rajouter dans la WORKING-STORAGE "EXEC SQL SET OPTION COMMIT = *NONE END-EXEC"

  9. #9
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    bonjour Mik02,
    heureuse que ton programme fonctionne, mais je ne comprends pas du tout le rapport entre ton SQLCODE -206 et la manière dont tu dis l'avoir résolu via l'option *NONE sur le COMMIT.
    pour moi il n y a pas de rapport direct...

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Moi non plus je ne vois pas trop le rapport mais j'avais une alternance entre le code erreur -206 et -7008 donc j'ai fais des recherches sur les 2 codes et en trouvant la solution pour le code 7008, je n'ai plus d'erreur 206...allez comprendre...

  11. #11
    Membre expérimenté

    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
    Points : 1 578
    Points
    1 578
    Par défaut
    Peux-tu coller ici l'instruction INSERT qui pose problème ?

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

Discussions similaires

  1. [COBOL/SQL] sqlcode -408
    Par Jean_Peuplus dans le forum Cobol
    Réponses: 9
    Dernier message: 17/09/2008, 22h49
  2. [COBOL/SQL] sqlcode -408
    Par Jean_Peuplus dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/09/2008, 13h11
  3. question simple COBOL/SQL
    Par Jean_Peuplus dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2008, 20h18
  4. SQL LOADER : paramétrage du fichier à charger
    Par boisdin dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 31/07/2007, 18h19
  5. Help ! Communication Cobol - SQL Server
    Par bobbyO dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/04/2007, 23h11

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