sql >> Database >  >> RDS >> Oracle

PL/SQL Cursor voor lus

*1. Je hebt een SELECT en een puntkomma nodig in de cursordefinitie

*2. U kunt een FOR-LUS over de cursor toevoegen

Bijvoorbeeld:

    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;

U kunt de expliciete cursordefinitie ook helemaal vermijden, bijvoorbeeld:

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

*3. Uw IF-verklaringen mogen geen puntkomma bevatten, bijvoorbeeld:

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

*4. [edit] dus je wilt je tabel, kolommen newstreetnumber . bijwerken en newstreetname - in dat geval zou je zoiets als dit kunnen doen:

    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;

Houd er echter rekening mee dat dit niet goed werkt voor grote volumes, en ik zou het liever allemaal in één UPDATE-statement doen.



  1. Een * (sterretje) toevoegen aan een Fulltext Search in MySQL

  2. Fout:mysqlnd kan geen verbinding maken met MySQL 4.1+ met de oude onveilige authenticatie

  3. Hoe kom ik achter de _exact_ fout van SQL Server?

  4. Mysql opgeslagen functies en groepsgewijze min