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 :

PL SQL valeur booléenne select


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut PL SQL valeur booléenne select
    Bonjour,

    je suis sur une fonction qui doit l'existence d'un vakeur dans une autre
    table ...

    exemple :
    function verifSTATUT(statut in varchar) return boolean
    IS
    test boolean;
    BEGIN
    test := true;

    test := select 1 from A where A.code IN ( select code from TABCODE);
    Est ce possible , est judicieux ???
    meilleur idéee ???


    END verifSTATUT;


    olivier

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Par défaut
    Juste une remarque pour l'optimisation : utiliser Exists au lieu de IN

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Merci de penser à utiliser les balises code (# dans la toolbar).

    Tout d'abord as-tu essayé la méthode que tu proposes ? Si c'est le cas tu as ta réponse tes 2 premières questions.

    Personnellement, je traiterais le problème en gérant une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function verifSTATUT(statut in varchar) 
    return boolean IS 
    BEGIN
      select 1
      from A
      where exists (select null from TABCODE where code = A.CODE)
       and rownum = 1;
      return true;
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          return false;
    END verifSTATUT;

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    Sinon tu peux utiliser un curseur qui va chercher la valeur dans la table et qui avec la méta donnée FOUND te renvoie faux s'il ne la trouve pas.
    IL semble que ce soit une solution assez rapide

    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
     
    function verifSTATUT
    return boolean IS 
     
    CURSOR cursor IS
       SELECT *
       FROM MA_TABLE m,
               TAB_CODE c,
       WHERE m.code = c.code;
     
    line cursor%rowtype;
     
    value BOOLEAN;
     
    BEGIN
     
    open cursor;
     
    fetch cursor into line;
     
    value:=cursor%found;
     
    close cursor;
     
    return value;
     
    END;

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Le NOT EXISTS n'est vraiment pas utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 1
    FROM A, TABCODE t
    WHERE t.code = a.code
    AND ROWNUM = 1

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par McM Voir le message
    Le NOT EXISTS n'est vraiment pas utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 1
    FROM A, TABCODE t
    WHERE t.code = a.code
    AND ROWNUM = 1
    A mon avis sur ce type de requête, le exists est plus performant.

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

Discussions similaires

  1. Requete SQL : Valeur par defaut dans un SELECT
    Par Wiwi31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2012, 22h44
  2. Réponses: 2
    Dernier message: 29/06/2011, 09h51
  3. [MySQL] Affichage de valeurs par selection dans une table
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 16/12/2005, 17h04
  4. [Oracle9i/ Pl/Sql] Update et select en même temps
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 7
    Dernier message: 31/05/2005, 17h26
  5. resultat requete SQL d'un select dans variable vb
    Par seb_06 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 11/10/2004, 16h29

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