sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL-markör för loop

*1. Du behöver ett SELECT och ett semikolon i markördefinitionen

*2. Du kan lägga till en FOR LOOP över markören

Till exempel:

    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 undvika den explicita markördefinitionen helt, t.ex.:

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

*3. Dina IF-satser kan inte innehålla semikolon - t.ex.:

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

*4. [redigera] så att du vill uppdatera din tabell, kolumner newstreetnumber och newstreetname - i så fall kan du göra något så här:

    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;

Observera dock att detta inte kommer att fungera bra för stora volymer, och jag föredrar att göra allt i en UPDATE-sats.



  1. MySQL JOIN-prestanda på 1 stort bord och flera små bord

  2. mysql namnkonvention

  3. Är det möjligt att avköa från ANYDATA Synchronous Capture-kö med JDBC?

  4. SQL SELECT för att få de första N positiva heltalen