Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Kursor PL/SQL dla pętli

*1. Potrzebujesz SELECT i średnika w definicji kursora

*2. Możesz dodać pętlę FOR nad kursorem

Na przykład:

    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;

Możesz alternatywnie całkowicie uniknąć wyraźnej definicji kursora, np.:

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

*3. Twoje wyciągi IF nie mogą zawierać średnika, np.:

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

*4. [edytuj], więc chcesz zaktualizować tabelę, kolumny newstreetnumber i newstreetname - w takim przypadku możesz zrobić coś takiego:

    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;

Pamiętaj jednak, że nie będzie to działać dobrze w przypadku dużych wolumenów i wolałbym zrobić to wszystko w jednej instrukcji UPDATE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wygenerować ślad FRD w Oracle Apps 11i/R12?

  2. Zapytanie SQL, średnia wzniesiona i para, która wspięła się na największe szczyty

  3. Oracle pobiera wszystkie dopasowane wystąpienia z kolumny

  4. atomowe porównywanie i zamiana w bazie danych

  5. Oracle „INSERT ALL” ignoruje duplikaty