Oracle
 sql >> Datenbank >  >> RDS >> Oracle

PL/SQL-Cursor für Schleife

*1. Sie benötigen ein SELECT und ein Semikolon in der Cursordefinition

*2. Sie können eine FOR-SCHLEIFE über dem Cursor einfügen

Zum Beispiel:

    DECLARE
      cursor c1 is
        SELECT street1
        from test_data;
      r1 c1%ROWTYPE;
    BEGIN
      FOR r1 IN c1 LOOP
         ... do your stuff with r1.street1
      END LOOP;
    END;

Alternativ können Sie auch ganz auf die explizite Cursor-Definition verzichten, z. B.:

FOR r1 IN (SELECT street1 FROM test_data) LOOP
   ... do your stuff with r1.street1
END LOOP;

*3. Ihre IF-Anweisungen dürfen kein Semikolon enthalten – z. B.:

    If
    Instr(r1.street1, 'Cnr', 1) >= 1
    Then

*4. [bearbeiten] Sie möchten also Ihre Tabelle aktualisieren, Spalten newstreetnumber und newstreetname - in diesem Fall könnten Sie etwa so vorgehen:

    DECLARE
      cursor c1 is
        SELECT street1
        from test_data
        FOR UPDATE;
      r1 c1%ROWTYPE;
    BEGIN
      FOR r1 IN c1 LOOP
         ... do your stuff with r1.street1
         UPDATE test_data
         SET newstreetnumber = ...
            ,newstreetname = ...
         WHERE CURRENT OF c1;
      END LOOP;
    END;

Beachten Sie jedoch, dass dies bei großen Volumes nicht gut funktioniert und ich es vorziehen würde, alles in einer UPDATE-Anweisung zu erledigen.