Oracle
 sql >> Database >  >> RDS >> Oracle

Cursore PL/SQL per il ciclo

*1. Hai bisogno di un SELECT e un punto e virgola nella definizione del cursore

*2. Puoi aggiungere un FOR LOOP sopra il cursore

Ad esempio:

    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;

In alternativa, puoi evitare del tutto la definizione esplicita del cursore, ad es.:

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

*3. Le tue istruzioni IF non possono includere un punto e virgola, ad esempio:

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

*4. [modifica] quindi vuoi aggiornare la tua tabella, colonne newstreetnumber e newstreetname - nel qual caso potresti fare qualcosa del genere:

    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;

Nota, tuttavia, che questo non funzionerà bene per grandi volumi e preferirei fare tutto in un'unica istruzione UPDATE.