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

PL/SQL Oracle Discussion :

Problème CASE


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2019
    Messages : 72
    Points : 46
    Points
    46
    Par défaut Problème CASE
    Bonjour voici mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
               DECLARE calcul_ETATPROJ varchar2(50);
                BEGIN
                    calcul_ETATPROJ := CASE WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER JOIN GDA_CONVOPER t4 ON t3.NUMOPER=t4.NUMOPER JOIN GDA_CONVENTION t5 ON t4.NUMCONV=t5.NUMCONV WHERE t1.NUMINTDEM = pNUMINT AND (t5.ETATCONV >= 'C130' AND t5.ETATCONV < 'C200')) != 0 THEN 'Convention entre C130 et C200' 
                                            WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER >= 'O110' AND t3.ETATOPER < 'O190')) != 0  THEN 'Operation entre O110 et O190'
                                            WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER >= 'O106' AND t3.ETATOPER < 'O190')) != 0  THEN 'Operation entre O106 et O190'
                                            WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER = 'O100')) != 0 THEN 'Operation egal a O100'
                                       END;
    L'erreur : Erreur(24,47): PLS-00103: Symbole "SELECT" rencontré à la place d'un des symboles suivants : ( - + case mod new not null <identificateur> <identificateur entre guillemets> <variable attachée> continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <un littéral de chaîne avec spécification de jeu de caractères> <un nombre> <une chaîne SQL entre apostrophes> pipe <constante de chaîne éventuellement entre guillemets avec indication du...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je ne connais pas trop Oracle, mais il ne manque pas un SELECT ?

    Tatayo.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2019
    Messages : 72
    Points : 46
    Points
    46
    Par défaut
    Je ne penses pas, en tout cas je ne vois pas trop ou il faudrait le mettre.

  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 802
    Points
    30 802
    Par défaut
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE
        calcul_ETATPROJ varchar2(50);
    BEGIN
        select  CASE WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER JOIN GDA_CONVOPER t4 ON t3.NUMOPER=t4.NUMOPER JOIN GDA_CONVENTION t5 ON t4.NUMCONV=t5.NUMCONV WHERE t1.NUMINTDEM = pNUMINT AND (t5.ETATCONV >= 'C130' AND t5.ETATCONV < 'C200')) != 0 THEN 'Convention entre C130 et C200' 
                    WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER >= 'O110' AND t3.ETATOPER < 'O190')) != 0  THEN 'Operation entre O110 et O190'
                    WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER >= 'O106' AND t3.ETATOPER < 'O190')) != 0  THEN 'Operation entre O106 et O190'
                    WHEN (SELECT COUNT(*) FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER = 'O100')) != 0 THEN 'Operation egal a O100'
                END
        into    calcul_ETATPROJ
        from    dual;
    end;
    A comparer aussi avec when exists (select 1 from ... where ...) then ... qui évite de devoir terminer le comptage pour déterminer le résultat.
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2019
    Messages : 72
    Points : 46
    Points
    46
    Par défaut
    Super ça marche, je te remercie

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Autre solution sans CASE (évite de faire un count(*))

    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
    DECLARE
     calcul_ETATPROJ varchar2(50);
     v NUMBER;
    BEGIN
      BEGIN
        SELECT 1 INTO v FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER JOIN GDA_CONVOPER t4 ON t3.NUMOPER=t4.NUMOPER JOIN GDA_CONVENTION t5 ON t4.NUMCONV=t5.NUMCONV 
        WHERE t1.NUMINTDEM = pNUMINT AND (t5.ETATCONV >= 'C130' AND t5.ETATCONV < 'C200') AND ROWNUM = 1;
        calcul_ETATPROJ := 'Convention entre C130 et C200';
      EXCEPTION WHEN NO_DATA_FOUND THEN    
        BEGIN
          SELECT 1 INTO v FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER
          WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER >= 'O110' AND t3.ETATOPER < 'O190') AND ROWNUM = 1;
          calcul_ETATPROJ := 'Operation entre O110 et O190';
        EXCEPTION WHEN NO_DATA_FOUND THEN    
          BEGIN  
            SELECT 1 INTO v FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER
            WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER >= 'O106' AND t3.ETATOPER < 'O190') AND ROWNUM = 1;
            calcul_ETATPROJ := 'Operation entre O106 et O190';
          EXCEPTION WHEN NO_DATA_FOUND THEN 
            BEGIN
             SELECT 1 INTO v FROM GDA_DA t1 JOIN GDA_DA_OPER t2 ON t1.NUMDA=t2.NUMDA JOIN GDA_OPERATION t3 ON t2.NUMOPER=t3.NUMOPER
             WHERE t1.NUMINTDEM = pNUMINT AND (t3.ETATOPER = 'O100') AND ROWNUM = 1;
             calcul_ETATPROJ := 'Operation egal a O100';
            EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
            END;
          END;
        END;
      END;   
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

Discussions similaires

  1. [VxiR2] Problème Case migration forcée BOXIR2
    Par jonki dans le forum Deski
    Réponses: 1
    Dernier message: 27/01/2016, 15h45
  2. problème case when then jpql
    Par hadmarin dans le forum Persistance des données
    Réponses: 0
    Dernier message: 08/09/2011, 10h31
  3. Problèmes cases Checkbutton
    Par Luke spywoker dans le forum Tkinter
    Réponses: 6
    Dernier message: 13/04/2011, 07h18
  4. [AC-2003] Problème case à cocher
    Par lucas-18 dans le forum IHM
    Réponses: 2
    Dernier message: 06/10/2009, 18h25
  5. Problème cases à cocher avec connection Mysql
    Par cams dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 01/12/2005, 14h13

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