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

PL/SQL Oracle Discussion :

Curseur interrompu au mileu du traitement


Sujet :

PL/SQL Oracle

  1. #1
    Invité
    Invité(e)
    Par défaut Curseur interrompu au mileu du traitement
    Bonjour,

    J'ai un probleme à l'intérieur du parcours de mon curseur.
    quand je fait un select a l'intérieur de celui si avec une clause where qui n'a pas de resultat celui ci s'arrete et ne teste pas les autres valeurs contenue dans le curseur. Comment faire pour qu'il teste les suivants et ne se termine pas quand il ne trouve pas une valeur.

    vous trouverez le contenue de mes tables ci dessous ainsi que le code PL/SQL.

    Contenu table Lieu_1 :

    CODE_1 LIBELLE_1
    ------ ------------------------------
    1 ooo
    3 dddd
    5 zzz
    10 aaa
    25 ccc
    4 xxxxx
    30 zzzz

    7 rows selected

    Contenu table Lieu_2 :

    CODE_2 LIBELLE_2
    ------ ------------------------------
    03 dddd
    05 zzz
    10 aaa
    25 ccc
    04 xxxxx
    30 zzzz

    6 rows selected


    Voici le code PL/SQL :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    DROP TABLE tmp_lieu;
    /
     
    CREATE TABLE tmp_lieu ( 
      code VARCHAR2(2), 
      libelle VARCHAR2(30)
    );
    /
     
    SET SERVEROUTPUT ON
    DECLARE
      CURSOR lieuCur IS SELECT code_1 FROM Lieu_1;
      code_lieu VARCHAR2(2);
      libelle_lieu varchar2(20);
    BEGIN
      OPEN lieuCur;
      LOOP
        FETCH lieuCur INTO code_lieu;
     
        IF LENGTH(code_lieu) = 1 THEN
          code_lieu := LPAD(code_lieu,2,'0');
        END IF;
     
        DBMS_OUTPUT.PUT_LINE('code : ' || code_lieu);
        libelle_lieu := '';
     
        SELECT libelle_2 INTO libelle_lieu FROM lieu_2 WHERE code_2 = code_lieu;
     
        IF LENGTH(libelle_lieu)>0 THEN
          INSERT INTO tmp_lieu VALUES (code_lieu, libelle_lieu);
        END IF;
     
        EXIT  WHEN lieuCur%NOTFOUND;
      END LOOP;
     
      EXCEPTION 
        WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Aucune donnees');
        WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);
    END;
    /
     
     SELECT * FROM tmp_lieu;
    /
    Resultat execution :

    DROP TABLE tmp_lieu succeeded.
    CREATE TABLE succeeded.
    anonymous block completed
    code : 01
    Aucune donnees

    CODE LIBELLE
    ---- ------------------------------

    0 rows selected


    Merci d'avance pour votre aide ;-)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    il faut encadrer ton select interne par un begin end pour trapper l'exception
    générer , sinon il va a la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       BEGIN 
        SELECT libelle_2 INTO libelle_lieu FROM lieu_2 WHERE code_2 = code_lieu;
      EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
                     --ton action
        WHEN OTHERS THEN 
                       --ton action
       END;

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/02/2015, 11h08
  2. temps de traitement des curseurs
    Par charluber dans le forum Oracle
    Réponses: 1
    Dernier message: 20/04/2006, 10h46
  3. Traitement ligne par ligne sans curseur
    Par AbyssoS dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/02/2006, 17h46
  4. [PL/SQL] Traitement d'un curseur dans une fonction
    Par ruda.tom dans le forum Oracle
    Réponses: 1
    Dernier message: 24/10/2005, 22h06

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