Mam procedurę, która wykonuje niektóre obliczenia na wszystkich rekordach zwracanych przez kursor. To wygląda trochę tak:Czy mogę przekazać wyraźny kursor do funkcji/procedury do użycia w pętli 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;
Teraz mam sprawę gdzie trzeba wykonać dokładnie te same obliczenia na inny zestaw rekordów, które pochodzą z innej tabeli. Jednak mają one ten sam "kształt" jak w powyższym przykładzie.
Czy to możliwe, aby napisać procedurę, która wygląda tak:
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;
wiem o SYS_REFCURSOR
, ale zastanawiałem się, czy to możliwe, aby użyć znacznie wygodniejsze FOR ... LOOP
składni i niejawny typu rekordu.
Dzięki Wasilij, nie byłem pewien, PL/SQL może obsłużyć ten poziom structual pisania, ale działa jak urok! :-) –
Nie ma za co) –
hi @VasilyKomarov .. co jeśli instrukcja kursora ma parametr, który przekazujesz jako dane wejściowe do wszystkich funkcji i procedur w pakiecie .. jak na przykład .. kursor c wybiera 1 jako jeden, 2 jako dwa z dual, gdzie row = row_id; gdzie parametr row_id jest parametrem – thealchemist