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 :

[erreur] exact fetch returns more than requested number of rows


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 6
    Points
    6
    Par défaut [erreur] exact fetch returns more than requested number of rows
    Bonjour à tous,

    J'ai de nouveau un problème. J'obtiens une erreur "ORA-01422: exact fetch returns more than requested number of rows". Je suis sous l'appli Apex.

    Il s'agit juste d'un code pour s'exercer, le but étant de multiplier deux valeurs "nombre_a" et "nombre_b" ensemble pour remplir le champ "resultat". Puis d'attribuer une valeur à "avis" en fonction de la valeur de "resultat" (< ou > 10). Puis avec l'aide d'un curseur, d'afficher les multiplications.

    Si vous aviez une explication ça m'arrangerait bien

    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
    DECLARE
        CURSOR aff_resultat IS SELECT nombre_a,nombre_b,resultat FROM nom_test WHERE RESULTAT IS NOT NULL;
        c_resultat number;
        c_nombrea number;
        c_nombreb number;
        c_resultat_temp number;
    BEGIN
        UPDATE nom_test SET RESULTAT = NOMBRE_A * NOMBRE_B;
        SELECT resultat into c_resultat_temp from nom_test;
        IF c_resultat_temp < 10 then UPDATE nom_test set avis = 'Not OK';
        ELSE update nom_test set avis = 'OK';
        END IF;
        OPEN aff_resultat;
        LOOP
             FETCH aff_resultat into c_nombrea,c_nombreb,c_resultat;
             EXIT WHEN aff_resultat%NOTFOUND;
             DBMS_OUTPUT.put_line(c_nombrea || '*' || c_nombreb || '=' || round(c_resultat,2));
        END LOOP;
    CLOSE aff_resultat;  
    EXCEPTION
        WHEN TOO_MANY_ROWS THEN
        dbms_output.put_line(SQLERRM); 
    END;

  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
    Houlala !! C'est quoi ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT resultat INTO c_resultat_temp FROM nom_test;
    Tu veux insérer X données dans 1 seule variable, ça sort donc en erreur.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE nom_test SET RESULTAT = NOMBRE_A * NOMBRE_B;
        SELECT resultat INTO c_resultat_temp FROM nom_test;
        IF c_resultat_temp < 10 then UPDATE nom_test SET avis = 'Not OK';
        ELSE UPDATE nom_test SET avis = 'OK';
        END IF;
    Tu peux le remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE nom_test
    SET resultat = nombre_A * nombre_B,
         avis = CASE WHEN nombre_A * nombre_B < 10 THEN 'Not OK' ELSE 'OK' 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
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par McM Voir le message
    Houlala !! C'est quoi ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT resultat INTO c_resultat_temp FROM nom_test;
    Tu veux insérer X données dans 1 seule variable, ça sort donc en erreur.
    Logique, j'avais pas fait gaffe...

    Merci pour la réponse rapide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2011, 10h38
  2. Réponses: 2
    Dernier message: 18/06/2010, 10h52
  3. [débutant] Erreur de procédure "Subquery returned more than 1 value"
    Par jeanmarc1234 dans le forum Développement
    Réponses: 4
    Dernier message: 11/12/2008, 23h09
  4. Erreur ORA-01427 single-row subquery returns more than one row
    Par SmileAndFly dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/08/2008, 15h12
  5. Réponses: 8
    Dernier message: 06/06/2008, 15h43

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