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

SQL Oracle Discussion :

Ordre d'execution des expressions dans un block IF


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Ordre d'execution des expressions dans un block IF


    Sur Oracle 10g (10.2.0.3)

    Exemple : if ( (expression1) or (exression2) or (expression3) ) then .... end if;

    je voudrais savoir, si comme dans mon exemple :
    1. Si le test de l'expression1 renvoie TRUE, est-ce-que Oracle effectue quand même les autres expressions bien qu'elle soit inutile

    2. Est-ce-que l'ordre des expressions est toujours respecté ? Cad si Oracle fait d'abord expression1 puis expression2, .... Ou alors dans un ordre que lui seul décide ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Le code suivant avec les résultats de son exécution le montre
    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
     
    set echo on
    drop table test purge
     
    drop table test succeeded.
    create table test (a date)
     
    create table succeeded.
    create or replace function f return number
    as
    begin
      insert into test values (sysdate);
      return 1;
    end f;
    /
     
    function f Compiled.
    begin
      if 1 = 1 or f() = 1 then
        null;
      end if;
    end;
    /
    anonymous block completed
    select * from test
     
    A                         
    ------------------------- 
     
    0 rows selected
     
    begin
      if 1 = 0 or f() = 1 then
        null;
      end if;
    end;
    /
    anonymous block completed
    select * from test
     
    A                         
    ------------------------- 
    13/12/07                  
     
    1 rows selected
    Consultant et formateur Oracle

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    C'est que la documentation Oracle appelle l'évaluation "circuit court".

  4. #4
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    C'est justement la documentation que je recherchai


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

Discussions similaires

  1. Modifier l'ordre des modules dans le block left
    Par Insert dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/11/2012, 14h44
  2. Ordre d'execution des objets
    Par H.Lionne dans le forum Informatica
    Réponses: 13
    Dernier message: 13/09/2010, 16h15
  3. Réponses: 6
    Dernier message: 17/06/2008, 11h28
  4. execution des requetes dans les mapping file hbm.xml
    Par makohsarah dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/06/2008, 18h06
  5. Réponses: 8
    Dernier message: 17/04/2007, 11h35

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