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

Oracle Discussion :

Probleme avec le resultat d'un SELECT


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 34
    Points
    34
    Par défaut Probleme avec le resultat d'un SELECT
    Bonjour,
    voila mon probleme:
    je voudrais récuperer le resultat d'un select et pouvoir tester s'il contient une valeur ou non!!!

    voila un bout du programme en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT vendues INTO tmp FROM statvol 
    WHERE idist = 90;
    IF tmp is NULL then
    INSERT INTO statvol VALUES(90,1,1,1);
    .....
    je vous remercie d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Points : 409
    Points
    409
    Par défaut
    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
    Declare 
      tmp varchar2(512) ; -- ou number , boolean etc ..
    begin
       SELECT vendues INTO tmp 
       FROM statvol
       WHERE idist = 90;
    Exception 
       when NO_DATA_FOUND then   -- aucun enregistrement trouvé 
          INSERT INTO statvol ( mieux vaut ici nommer les colonnes ) VALUES(90,1,1,1);
        when TO_MANY_ROWS then  -- plusieurs lignes trouvées 
           null;
         when OTHERS then
           dbms_output.put_line ( SQLCODE ||' : ' || SQLERRM );
    End;

    CDLT.

  3. #3
    Membre habitué Avatar de VinceTlse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 163
    Points : 191
    Points
    191
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO statvol VALUES(90,1,1,1)
    WHERE NOT EXISTS (SELECT NULL FROM statvol
    WHERE idist = 90);
    Pourquoi faire aujourd'hui ce que l'on peut faire demain ...

  4. #4
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    T'es sur de toi VinceTlse ? Tu n'utilise nulle part statvol.vendues et il me semble que c'est ça qui doit être égal à null pour déclencher l'insertion...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Sinon, il y a MERGE qui le fait très bien

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    je vous remercie pour vous réponse, mais j'ai toujours un problème avec le resultat.

    voila 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
    22
    23
     
    CREATE OR REPLACE TRIGGER stat
    AFTER UPDATE OF pldispo ON vols
    FOR EACH ROW
    DECLARE 
    tmp NUMBER;
    mo  NUMBER;
    an  NUMBER;
    BEGIN
    mo := to_char(:new.dates,'mm') ;
    an := to_char(:new.dates,'yy') ;
    SELECT vendues INTO tmp
    FROM statvol 
       where :new.idist = idist AND mo = mois AND an = annee;  
    Exception 
       when NO_DATA_FOUND then   
          INSERT INTO statvol VALUES(:new.idist,1,mo,an);
       when TOO_MANY_ROWS then  
           UPDATE statvol SET vendues  = vendues + 1
           WHERE  mo = mois AND an = annee AND :new.idist = idist;
    ...
    end;
    /
    mon problème c'est même dans le cas ou il doit exister une ligne de resultat, il ne passe pas dans le TOO_MANY...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Points : 409
    Points
    409
    Par défaut
    une ligne de resultat, il ne passe pas dans le TOO_MANY.
    S'il n'existe qu'une ligne , l'exception TOO_MANY_ROWS n'est pas déclanchée ( ce qui peut parraitre normal > TOO_MANY_ROWS := trop de lignes ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ....
    begin
    SELECT vendues INTO tmp
    FROM statvol
    where :new.idist = idist AND mo = mois AND an = annee;
    /* Insérer ici le traitement à effectuer si UNE ligne est retournée*/
    -- traitement UNE ligne 
    Exception
    when NO_DATA_FOUND then
    -- Ici le code du traitement si aucune ligne n'est retournée 
    when TOO_MANY_ROWS then
    -- Ici le code du traitement si plusieurs lignes sont retournées par le SELECT...
    end;

    http://sheikyerbouti.developpez.com/...=Chap1#L1.2.20

    CDLT.

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    ATTENTION

    utiluiser du code logique dans des exceptions, c'est peut-être correct au niveau fonctionnement mais pour la maintenance applicative ...

    les exceptions c'est pour les exceptions ; pas pour un traitement "normal"

    il faut aussi penser à la lisibilité du code !

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Tu peux aussi
    - faire l'update
    - tester le SQL%ROWCOUNT (variable système indiquant le nombre de ligne modifiée)
    - et si ce nombre est 0, faire l'insert.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    bonsoir,
    finalement j'ai fait la selection et puis directement l'update et donc dans le cas ou l'exception me ramene NO_DATA_FOUND je fait l'INSERT.

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    si c'est résolu, mettre le tag RESOLU . merci

Discussions similaires

  1. UPDATE avec le resultat d'un SELECT
    Par aelmalki dans le forum SQL
    Réponses: 9
    Dernier message: 03/03/2010, 16h39
  2. [MySQL] probleme avec le retour d'une selection dans une base de donnees
    Par sovo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/02/2010, 18h00
  3. Probleme avec aucun resultat pas de message
    Par jarod6827 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/06/2009, 16h02
  4. [requête] : probleme avec le resultat
    Par camzo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/04/2007, 11h23
  5. [JDBC] Problème avec le resultat
    Par Cyborg289 dans le forum JDBC
    Réponses: 7
    Dernier message: 27/09/2005, 11h05

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