Announcement

Collapse
No announcement yet.

NO_DATA_FOUND in while-schleife

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NO_DATA_FOUND in while-schleife

    hallo,
    ich habe folgendes Problem,

    ich habe eine while-schleife die ein bestimmtes select-into statement durchläuft.
    passt auch meistens, da immer ein datensatz gefunden wird. aber es kann auch vorkommen, dass meine select abfrage kein ergebnis liefert (also no_data_found). ich weiß, dass ich dies mit einer exception abfangen kann. allerdings bricht der dann bei mir auch immer sofort die schleife ab.

    deswegen meine frage. wie kann ich es machen, dass wenn innerhalb einer while-schleife eine select anweisung keine ergebnisse liefert (also no_data_found), dieser mir ans ende der while-schleife springt, also einfach als wäre nichts geschehen. danach soll die while-schleife ganz normal weiterlaufen.

    danke für eure antworten.

    mfg stash

  • #2
    Hi !

    in dem du in der WHILE Schleife noch ein BEGIN EXCEPTION END Block reinbaust.
    Die Exception wird dann innerhalb der Schleife abgefangen und läuft somit weiter.

    Grüsse morlogg
    Zuletzt editiert von morlogg; 07.01.2009, 13:10.

    Comment


    • #3
      hallo,
      erstmal danke für die antwort. allerdings weiß ich nicht, wie das dann im Code auszusehen hat. könntest du mir anhand eines kurzen ausschnitts zeigen, wo dann dieser begin-end-exception block zu stehen hat (muss er vor dem select-statement stehen, dahinter,...)

      danke.

      Comment


      • #4
        hier ein Beispiel, das Dir hoffentlich weiterhilft:
        Code:
        /*
        --Testtabelle bauen
        CREATE TABLE test_057 AS
              SELECT 1 nr, 'Eins' zahl FROM DUAL
              UNION ALL
              SELECT 2   , 'Zwei'      FROM DUAL
              UNION ALL
              SELECT 5   , 'Fünf'      FROM DUAL;
        	  
        COMMIT;
        */
        
        --hier der Test selbst
        SET SERVEROUTPUT ON SIZE 1000000;
        
        DECLARE
           inr     NUMBER;
           tzahl   VARCHAR2(30);
        BEGIN
           FOR i IN 1 .. 10
           LOOP
              BEGIN
                 SELECT zahl INTO tzahl FROM test_057 WHERE nr = i;
                 DBMS_OUTPUT.put_line('Nr=' || i || ' Zahl=' || tzahl);
              EXCEPTION
                 WHEN NO_DATA_FOUND
                 THEN
                    DBMS_OUTPUT.put_line('Für ' || i || ' nix gefunden');
              END;
           END LOOP;
        END;
        gibt:
        Code:
        Nr=1 Zahl=Eins
        Nr=2 Zahl=Zwei
        Für 3 nix gefunden
        Für 4 nix gefunden
        Nr=5 Zahl=Fünf
        Für 6 nix gefunden
        Für 7 nix gefunden
        Für 8 nix gefunden
        Für 9 nix gefunden
        Für 10 nix gefunden
        Viel Erfolg

        Comment


        • #5
          hallo jum,
          vielen dank für dein beispiel. hat mir sehr geholfen.
          danke.

          Comment


          • #6
            So bekommst du nie einen Fehler:

            select 1 Dummy, ( SELECT zahl FROM test_057 WHERE nr = i)
            into nDummy, tzahl
            from dual ;

            Comment

            Working...
            X