sql >> Base de Datos >  >> RDS >> Oracle

Cursor PL/SQL para bucle

*1. Necesita un SELECCIONAR y un punto y coma en la definición del cursor

*2. Puedes agregar un FOR LOOP sobre el cursor

Por ejemplo:

    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;

Como alternativa, puede evitar por completo la definición explícita del cursor, por ejemplo:

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

*3. Sus declaraciones IF no pueden incluir un punto y coma, por ejemplo:

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

*4. [editar] por lo que desea actualizar su tabla, columnas newstreetnumber y newstreetname - en cuyo caso podrías hacer algo como esto:

    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;

Tenga en cuenta, sin embargo, que esto no funcionará bien para grandes volúmenes, y preferiría hacerlo todo en una declaración de ACTUALIZACIÓN.