sql >> Databáze >  >> RDS >> Oracle

PL/SQL Kurzor pro smyčku

*1. V definici kurzoru

potřebujete SELECT a středník

*2. Přes kurzor můžete přidat FOR LOOP

Například:

    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;

Alternativně se můžete zcela vyhnout explicitní definici kurzoru, např.:

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

*3. Vaše příkazy IF nemohou obsahovat středník – např.:

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

*4. [edit], takže chcete aktualizovat tabulku, sloupce newstreetnumber a newstreetname - v takovém případě můžete udělat něco takového:

    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;

Všimněte si však, že to nebude fungovat dobře pro velké objemy a raději bych to všechno provedl v jednom příkazu UPDATE.



  1. Non-superuser se nemůže připojit, pokud server při používání dblink nepožaduje heslo

  2. Výchozí hodnota vstupního datového souboru se nevkládá do tabulky

  3. Vložit poddotaz do Výběrového dotazu

  4. Nelze deklarovat proměnnou uvnitř funkce na PostgreSQL