sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL-markør til loop

*1. Du skal bruge et SELECT og et semikolon i markørdefinitionen

*2. Du kan tilføje en FOR LOOP over markøren

For eksempel:

    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;

Du kan alternativt helt undgå den eksplicitte markørdefinition, f.eks.:

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

*3. Dine IF-udsagn kan ikke indeholde semikolon - f.eks.:

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

*4. [edit], så du vil opdatere din tabel, kolonnerne newstreetnumber og newstreetname - i så fald kunne du gøre noget som dette:

    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;

Bemærk dog, at dette ikke vil fungere godt for store mængder, og jeg foretrækker at gøre det hele i én UPDATE-erklæring.



  1. Mysql-forespørgsel med Left Join er for meget langsom

  2. skal jeg lave et indeks for dette?

  3. MYSQL:Indsættelse af traditionel og forenklet kinesisk i samme 'celle'

  4. WEEKOFYEAR() Eksempler – MySQL