Oracle
 sql >> база данни >  >> RDS >> Oracle

PL/SQL Курсор за цикъл

*1. Имате нужда от SELECT и точка и запетая в дефиницията на курсора

*2. Можете да добавите FOR LOOP над курсора

Например:

    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;

Можете, алтернативно, да избегнете изцяло изричната дефиниция на курсора, напр.:

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

*3. Вашите инструкции IF не могат да включват точка и запетая - напр.:

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

*4. [редактиране], така че искате да актуализирате вашата таблица, колони newstreetnumber и newstreetname - в който случай можете да направите нещо подобно:

    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;

Обърнете внимание обаче, че това няма да работи добре за големи обеми и бих предпочел да направя всичко в един оператор 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. Заявка на Oracle за извличане на имена на колони

  2. Oracle ROWID като параметър на функция/процедура

  3. Има ли начин да прехвърлите персонализиран тип от C# към Oracle с помощта на System.Data.OracleClient?

  4. Кои са най-добрите решения за известни проблеми с валидирането на схемата на Hibernate на колони с плаваща запетая при използване на Oracle 10g?

  5. как да извикам един съхранен процес от прашник и да модифицирам рекурсора, който се връща?