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 :

Select dans un If


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Points : 72
    Points
    72
    Par défaut Select dans un If
    Bonjour,

    Je ne parviens pas à trouver de solutions pour pouvoir effectuer cette requête:
    (le problème étant que l'on de peut pas exécuter de requêtes dans un if)
    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
     
    Declare pDate date;
    pOpenDays number;
     
    Begin
     
    pDate       := sysdate;
    pOpenDays   := 5;
     
    While pOpenDays > 1
    Loop
        Begin
     
            If          (to_char(pDate+1,'DAY','NLS_DATE_LANGUAGE=FRENCH') like 'SAMEDI%')
                    or  (to_char(pDate+1,'DAY','NLS_DATE_LANGUAGE=FRENCH') like 'DIMANCHE%') 
                    or  trunc(pDate+1,'DAY') in  (  select  
                                                            scp.SCP_DATE 
                                                    from    pac_schedule_period     scp
                                                        ,   pac_schedule            sch
                                                    where   scp.pac_schedule_id=sch.pac_schedule_id
                                                        and sch.sce_default=1
                                                        and scp.scp_nonworking_day=1
                                                        and scp.scp_date is not Null)
            Then 
                pDate       := pDate + 1;
            Else 
                pDate       := pDate + 1;
                pOpenDays   := pOpenDays - 1;
            End if;
     
        End;
    End loop;
     
    dbms_output.put_line(to_char(pDate,'DD/MM/YYYY'));
     
    End;
    Le problème étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     or  trunc(pDate+1,'DAY') in  (  select  
                                                            scp.SCP_DATE 
                                                    from    pac_schedule_period     scp
                                                        ,   pac_schedule            sch
                                                    where   scp.pac_schedule_id=sch.pac_schedule_id
                                                        and sch.sce_default=1
                                                        and scp.scp_nonworking_day=1
                                                        and scp.scp_date is not Null)
    J'ai vu plusieurs solutions dont l'utilisation d'une autre boucle for qui est l'équivalent de in, ou de fetch mais je n'ai pas du tout compris comment cela fonctionne.
    Auriez vous d'autres idées?

    Merci
    Bonne journée

  2. #2
    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
    1/ Utilise le format 'FMDAY' pour enlever les espaces rajoutés aux noms de jour
    2/ Tu peux gérer ton cas avec un SELECT et exception no_data_found (J'ai rajouté un ROWNUM=1 dans la requête car je ne connais pas le modèle de données)

    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
    DECLARE
    	pDate date;
      pOpenDays number;
      v NUMBER;
    BEGIN
      pDate       := SYSDATE;	
    	pOpenDays   := 5;
    	WHILE pOpenDays > 1
    	LOOP
          IF TO_CHAR(pDate+1,'FMDAY','NLS_DATE_LANGUAGE=FRENCH') IN ('SAMEDI', 'DIMANCHE') 
          THEN 
              pDate       := pDate + 1;
          ELSE 
            BEGIN
              SELECT 1
              INTO v
              FROM    pac_schedule_period  scp, pac_schedule sch
              WHERE   scp.pac_schedule_id=sch.pac_schedule_id
              AND sch.sce_default=1
              AND scp.scp_nonworking_day=1
              AND scp.scp_date = TRUNC(pDate+1,'DAY')
              AND ROWNUM = 1;
     
              pDate       := pDate + 1;
     
            EXCEPTION WHEN NO_DATA_FOUND 
            THEN
              pDate       := pDate + 1;
              pOpenDays   := pOpenDays - 1;
            END;
          END IF;
    	END LOOP;
     dbms_output.put_line(TO_CHAR(pDate,'DD/MM/YYYY'));
    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

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Bonjour.

    Votre solution est bonne. j'avais juste fait une erreur avec TRUNC(date,DAY), je ne savais pas que ça renvoyait le premier jour de la semaine.
    Merci en tout cas.

    Bonne journée

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Réponses: 8
    Dernier message: 05/05/2004, 16h28
  3. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  4. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 18h06
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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