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/eSQL] Cherche fonction SQL


Sujet :

Cobol

  1. #1
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut [Cobol/eSQL] Cherche fonction SQL
    Bonjour a tous,

    apres un select d'un champs comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select b1000 from tdr33 where h2000='OYU'
    j obtiens le resultat suivant :
    soit
    1
    1
    1
    ou
    2
    2
    2
    ou
    2
    1
    2
    2
    ma question est :
    dans un programme apres avoir balancé le select, je voudrais pouvoir savoir se que le select ma retourné parmis les trois possibilité ci dessus ?

    merci pour votre aide

    A+

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Qu'est-ce que tu veux savoir ?
    S'il n'y a que des 1 ? que des 2 ? un mélange des deux ? le nombre d'occurences de chacun ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    je veux savoir quel le cas des trois apres mon select
    je veux pouvoir faire 3 traitement different selon le resultat du select a savoir que des 1 ou que des 2 ou le melange des deux !

    merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Voilà une réponse possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT   CASE  SUM(b1000)  / COUNT(*)
                WHEN  1  THEN  'Que des 1'
                WHEN  2  THEN  'Que des 2'
                ELSE  'Un mélange'
             END
    FROM     tdr33 
    WHERE    h2000 = 'OYU'
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    merci ca m a l air pas mal ton truc
    mais pourrais je recuperer les messages dans des variables pour que je puisse les tester avec des 'IF' par exemple?

    encore merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    en reprenant la réponse de al1_24:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT   CASE  SUM(b1000)  / COUNT(*)
                WHEN  1  THEN  'Que des 1'
                WHEN  2  THEN  'Que des 2'
                ELSE  'Un mélange'
             END AS nomVariable
    FROM     tdr33 
    WHERE    h2000 = 'OYU'
    ;

  7. #7
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    merci beaucoup!
    cela fonctiionne tres bien sous SQL
    mais j ai une erreur SQLCODE -00000905 quand j execute ma requete via un pgm cobol !
    pouvez vous encore une fois m aider svouplai ?

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    La requete est bonne, cela doit donc venir du cobol.

  9. #9
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Si tu fais du esql, la syntaxe est SELECT ... INTO variable

    A +

  10. #10
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    Bonjour,
    j espere que tout le monde a passé un bon week !

    sinon effectivement la requete est bonne fonctionne tres bien elle fait exactement ce que je voulais, mais dans mon prog cobol elle me retourne une erreur sql -905 que j arrive po a comprendre "messing key"!

    pour repondre a TheLeadingEdge j utilise bien un into dans pgm cobol dont voici le code :
    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
    SELECTE-FZ33.
               EXEC SQL 
                   SELECT	
                   CASE SUM(B2825) / COUNT(*)
                          WHEN 1 THEN 'UN'
                   	      WHEN 2 THEN 'DEUX'
                   	      ELSE 'MIXTE'
                   END AS CHOIX
                   INTO  :FZ33-B2825,
                           :WW00-COUNT
                   FROM   TFZ33
                   WHERE  G4000  = :FZ33-G4000
                      AND G4300  = :FZ33-G4300
                      AND A230BG = :FZ33-A230BG
               END-EXEC.
               MOVE 'SELECTE TABLE FZ33' TO MESSAGE-ERREUR.
               IF SQLCODE = 0
                  ADD 1 TO CPT-FZ33
               END-IF.
               PERFORM TEST-SQLCODE.
           FIN-SELECTE-FZ33.
    que faut-il faire pour que ca marche svouplai ??
    merci pour votre aide

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Je ne connais les appels SQL en Cobol mais je ne comprends pas bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         SELECT	
                   CASE SUM(B2825) / COUNT(*)
                          WHEN 1 THEN 'UN'
                   	      WHEN 2 THEN 'DEUX'
                   	      ELSE 'MIXTE'
                   END AS CHOIX
                   INTO  :FZ33-B2825,
                           :WW00-COUNT
                   FROM   TFZ33
                   WHERE  G4000  = :FZ33-G4000
                      AND G4300  = :FZ33-G4300
                      AND A230BG = :FZ33-A230BG
    A quoi sert la variable WW00-COUNT ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  12. #12
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Re,

    Je ne connais pas bien l'utilisation de esql en COBOL (mais en C), mais il y 2 petites chose qui me choquent. Mais c'est peut-être spec. à ton implémentation ?

    Tu fais SELECT 1colonne INTO colonne1, :colonne2 ?

    et ne faut-il pas 1 ';' apres la rq avant le end-exec ?

  13. #13
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    en fait j ai rajouté la ww00-COUNT qui me sert de host variable pour le COUNT(*) car je pensais que mon erreur venait de la !! et pas du tout ca plante toujours .... en oslq pas besoin de into car il s en sort tranquille avec ses tables mais dans un prog y a besoin de host variable pour qu il reconnaisse les variable qu on select et la en l occurence j ai ma b2825 et ensuite j ai tenté une host variable pour le COUNT qui ne marche pas !!
    putain j ai tout bouclé sur mon prog et ce select conditionne quasi tout mon prog et ca plante !!! au secour !

  14. #14
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Ta requête retourne une seule valeur (1 colonne CHOIX * 1 ligne). Pourquoi alors faire SELECT ... INTO :var1, :var2 ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  15. #15
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par TheLeadingEdge
    Re,

    Je ne connais pas bien l'utilisation de esql en COBOL (mais en C), mais il y 2 petites chose qui me choquent. Mais c'est peut-être spec. à ton implémentation ?

    Tu fais SELECT 1colonne INTO colonne1, :colonne2 ?

    et ne faut-il pas 1 ';' apres la rq avant le end-exec ?
    hola,

    un ';' direct sous sql ouais mais pas dans le prog !

    et into :colonne1(b2825) , :colonne2(count) je croyais que le pb etait la !!

    ???

  16. #16
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par al1_24
    Ta requête retourne une seule valeur (1 colonne * 1 ligne). Pourquoi alors faire SELECT ... INTO :var1, :var2 ?
    je suis pas tres bon en sql donc j ai tenté la var2 par desespoir on va dire mais ca ne marche pas je l ai deja virée de mon prog ....

    une suggestion please ??

  17. #17
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par nenekes
    cela fonctiionne tres bien sous SQL
    mais j ai une erreur SQLCODE -00000905 quand j execute ma requete via un pgm cobol !
    pouvez vous encore une fois m aider svouplai ?
    Afin d'optimiser tes chances de réponses, je déplace puisque ça n'est plus un problème relevant du langage SQL
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  18. #18
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    mais ca releve de l enigme ma parole
    bon je trouve toujours pas de solution ....

    procedon autrement avec un select classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    EXEC SQL 
                   SELECT SUM(B2825) / COUNT(*) 
                   INTO   :WW33-B2825
                   FROM   TFZ33
                   WHERE  G4000  = :FZ33-G4000
                      AND G4300  = :FZ33-G4300
                      AND A230BG = :FZ33-A230BG
               END-EXEC.
    a partir de la je souhaite recuperer mon resulat dans une varibale qui accepte la vergule donc comment declare-t-on une var de ce genre en cobol ? (pic9(1)V9 ???? )

    et je souhaite aussi savoir la syntaxe du 'CASE' en cobol ?? ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case var in 
          1 then 'un'
          2 then 'deux'
          else 'autre'
    end AS VAR1
    bon ca marche pas ca !!! connais pas comment on ecrit !!!
    comme ca je pourrais faire mon choix apres que la requete m ai retournée quelque chose !!!

    merci beaucoup !

  19. #19
    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
    Citation Envoyé par nenekes
    mais ca releve de l enigme ma parole
    bon je trouve toujours pas de solution ....
    Quel COBOL sur quel OS ?
    Quel SGBD ?

    a partir de la je souhaite recuperer mon resulat dans une varibale qui accepte la vergule donc comment declare-t-on une var de ce genre en cobol ? (pic9(1)V9 ???? )
    Sur Mainframe IBM avec DB2 c'est du binaire ... (BINARY en COBOL)

    et je souhaite aussi savoir la syntaxe du 'CASE' en cobol ?? ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case var in 
          1 then 'un'
          2 then 'deux'
          else 'autre'
    end AS VAR1
    ...
    C'est l'instruction EVALUATE en COBOL.
    cf :
    http://publibz.boulder.ibm.com/cgi-b...19981109163611
    Attention ! Encore une fois c'est une doc pour du COBOL sur Mainframe IBM ...

  20. #20
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    hola Luc,

    version serveur express cobol v2.2.00-e
    os unix
    oracle 9

    merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/01/2009, 21h21
  2. [Fonction SQL Serveur] convertir des secondes en heure
    Par falcon dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/11/2004, 17h22
  3. fonction sql "LIMIT" en interbase?
    Par GMI dans le forum InterBase
    Réponses: 6
    Dernier message: 20/09/2004, 14h04
  4. Réponses: 10
    Dernier message: 17/12/2003, 13h51
  5. Cherche Fonction du style replace...
    Par sdchamplas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/03/2003, 13h54

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