Execption "too many rows"

Fermé
bouhmid86 Messages postés 21 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 26 février 2011 - 6 nov. 2009 à 00:17
bouhmid86 Messages postés 21 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 26 février 2011 - 6 nov. 2009 à 13:14
Bonjour, je debute en pl/sql j'ai pas bien comprit comment peut on avoir l'exception "too many rows" il ya plusieurs lignes?? . je veut un exemple simple. merci a tous
A voir également:

4 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
6 nov. 2009 à 12:52
Salut,

Un simple exemple:

DROP TABLE aaa;

CREATE TABLE aaa (
   b NUMBER
);

INSERT INTO aaa
VALUES (1);

DROP PROCEDURE ppp;

CREATE OR REPLACE PROCEDURE ppp
IS
BEGIN
   DECLARE
      dummy   NUMBER;
   BEGIN
      SELECT b
      INTO dummy
      FROM aaa;

      DBMS_OUTPUT.put_line ('value is ' || dummy);
   END;
END;
/

exec ppp;


==> à la console nous aurons:

Procedure created.
PL/SQL procedure successfully completed.
1 row created.
value is 1


Donc tout est OK. Rajoutons une valeur et réexécutons:

INSERT INTO aaa
VALUES (2);

exec ppp;

==> à la console nouas aurons:

1 row created.
BEGIN ppp; END;
Error at line 4
ORA-01422: l'extraction exacte ramène plus que le nombre de lignes demandé
ORA-06512: à "PPP", ligne 7
ORA-06512: à ligne 1


Modifions notre procédure stockée:

CREATE OR REPLACE PROCEDURE ppp
IS
BEGIN
   DECLARE
      dummy   NUMBER;
   BEGIN
      SELECT b
      INTO dummy
      FROM aaa;

      DBMS_OUTPUT.put_line ('value is ' || dummy);
   EXCEPTION
      WHEN TOO_MANY_ROWS
      THEN
         DBMS_OUTPUT.put_line ('catched error :-)');
   END;
END;
/

Et rebelotte pour une exécution:
exec ppp;


==> à la console nous aurons:

catched error :-)

Voilou...
++
1