Announcement

Collapse
No announcement yet.

Cursor ohne Werte

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

  • Cursor ohne Werte

    HALLO,

    Meine sp beinhaltet 3 Cursor Funktionen.
    Dabei ruft jeder Cursor nacheinender unterschiedliche Abfragen auf.
    Wenn eine der Abfragen leer ist, bekommt der Cursor ja keine Daten um einen Fetch zu machen.
    Wie kann ich in diesem Fall zum nächsten Cursor springen?
    z.B.


    IF "Abfrage" = Kein Ergebnis Cursor überspringen, zum nächsten Cursor gehen
    ELSE Cursor ausführen

  • #2
    Hallo,

    bei Oracle in PL/SQL gibt es ein NOTFOUND für den cursor.
    z.B.:

    cursor cursor1 is
    select spalte1 from tabelle1 where spalte1 < 100;
    cursor cursor2 is
    select spalte2 from tabelle2 where spalte2 < 100;

    begin

    open cursor1
    loop
    fetch cursor1 into varspalte1;
    exit when cursor1%notfound;
    end loop;
    close cursor1;

    open cursor2
    loop
    fetch cursor2 into varspalte2;
    exit when cursor2%notfound;
    end loop;
    close cursor2;

    end;

    Gruß
    Uschi

    Comment


    • #3
      Sorry aber ich versteh nicht wie in das implementieren soll.

      Code:
      DECLARE auft CURSOR 	
      FOR 			
      				
      
      	SELECT data,ctrl,crde,
      	FROM dbo.VIEW_1
      	
      OPEN auft
      
      DECLARE	...
      
      
      FETCH NEXT FROM auft INTO .....
      ...
      .
      .
      .
      .
      FETCH NEXT FROM auft INTO 
      
      CLOSE auft
      DEALLOCATE auft

      Comment


      • #4
        Hallo,

        ich kenn ja Dein DBMS nicht, was verwendest Du denn ?

        Wenn Du kein loop hast, vielleicht ein while?

        Entsprechend für den Cursor - wenn der Cursor keine Daten bekommt, erhält er den passenden Status - den kannst Du für den Lese-Schleifenabbruch prüfen, das heisst bei Dir nur wahrscheinlich anders.

        Die Syntax hängt am DBMS.

        Bei dem Code-Stück, das Du eingefügt hast, seh ich keine Schleife, wie hast Du denn das realisiert ?

        Gruß
        Uschi

        Comment


        • #5
          Hallo,

          verwendest Du MS SQL-Server ?

          dann könnte das passen:
          [highlight=sql]DECLARE auft CURSOR
          FOR


          SELECT data,ctrl,crde,
          FROM dbo.VIEW_1

          OPEN auft

          DECLARE ...


          FETCH NEXT FROM auft INTO .....
          ...
          .
          WHILE @@FETCH_STATUS = 0
          BEGIN
          .
          FETCH NEXT FROM auft INTO

          END
          CLOSE auft
          DEALLOCATE auft[/highlight]

          Gruß
          Uschi

          Comment


          • #6
            Ich weiß nicht genau wo das problem ist. Wenn ein Cursor keine Daten rausbekommt dann geht er nicht einmal in den Cursor rein.

            Wenn du Cursor - for Schleifen nimmst geht das noch einfacher!

            z.B

            Code:
            declare
              cursor myCursor1 is
              select spalte1
                from tabelle1;
              cursor myCursor2 is
              select spalte2
                from tabelle2;
              cursor myCursor2 is
              select spalte2
                from tabelle2;
            begin
              for myRecord1 in myCursor1 loop
                --Code wenn Datensätze vorhanden
                exit when myCursor1%notfound;
              end loop;
              for myRecord2 in myCursor2 loop
                --Code wenn Datensätze vorhanden
                exit when myCursor2%notfound;
              end loop;
              for myRecord3 in myCursor3 loop
                --Code wenn Datensätze vorhanden
                exit when myCursor3%notfound;
              end loop;
            end;
            Hoffe ich konnte helfen!
            Zuletzt editiert von Rorschach; 05.09.2009, 14:45.

            Comment

            Working...
            X