Execption "too many rows"

bouhmid86 Messages postés 30 Statut Membre -  
bouhmid86 Messages postés 30 Statut Membre -
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
Configuration: Windows Vista
Safari 532.0

4 réponses

  1. sandul Messages postés 4013 Statut Membre 723
     
    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