Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Cursor PL/SQL para loop


*1. Você precisa de um SELECT e um ponto e vírgula na definição do cursor

*2. Você pode adicionar um FOR LOOP sobre o cursor

Por exemplo:
    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;

Você pode, alternativamente, evitar totalmente a definição explícita do cursor, por exemplo:
FOR r1 IN (SELECT street1 FROM test_data) LOOP
   ... do your stuff with r1.street1
END LOOP;

*3. Suas instruções IF não podem incluir um ponto e vírgula - por exemplo:
    If
    Instr(r1.street1, 'Cnr', 1) >= 1
    Then

*4. [edit] então você deseja atualizar sua tabela, colunas newstreetnumber e newstreetname - nesse caso você poderia fazer algo assim:
    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;

Observe, no entanto, que isso não funcionará bem para grandes volumes e eu prefiro fazer tudo em uma instrução UPDATE.