Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2007, 14h53   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
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 :
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;
CrazyLiam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 15h05   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Houlala !! C'est quoi ce code ?

Code :
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 :
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 :
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 15h08   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
Citation:
Envoyé par McM Voir le message
Houlala !! C'est quoi ce code ?

Citation:
Code :
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
CrazyLiam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h17.


 
 
 
 
Partenaires

Hébergement Web