Ho una procedura che esegue alcuni calcoli su tutti i record restituiti da un cursore. Sembra un po 'come questo:Posso passare un cursore esplicito a una funzione/procedura da utilizzare nel ciclo FOR?
PROCEDURE do_calc(id table.id_column%TYPE)
IS
CURSOR c IS
SELECT col1, col2, col3
FROM table
WHERE ...;
BEGIN
FOR r IN c LOOP
-- do some complicated calculations using r.col1, r.col2, r.col3 etc.
END LOOP;
END;
Ora ho il caso in cui ho bisogno per eseguire lo stesso calcolo esatto su un diverso insieme di record che provengono da una tabella diversa. Tuttavia, questi hanno la stessa "forma" come nell'esempio precedente.
E 'possibile scrivere una procedura che assomiglia a questo:
PROCEDURE do_calc2(c some_cursor_type)
IS
BEGIN
FOR r IN c LOOP
-- do the calc, knowing we have r.col1, r.col2, r.col3, etc.
END LOOP;
END;
che so di SYS_REFCURSOR
, ma mi chiedevo se fosse possibile utilizzare il molto più conveniente FOR ... LOOP
sintassi e il tipo di registrazione implicita.
Grazie Vasily, non ero sicuro di PL/SQL in grado di gestire quel livello di battitura structual, ma funziona come un incantesimo! :-) –
Prego) –
hi @VasilyKomarov .. cosa succede se l'istruzione del cursore ha un parametro che si passa come input a tutte le funzioni e le procedure nel pacchetto .. come ad esempio .. il cursore c è selezionato 1 come uno, 2 come due dal doppio dove row = row_id; dove row_id è il parametro – thealchemist