Существует несколько слегка отличающихся синтаксисов для циклического прохождения наборов результатов в PL / SQL.Они дают нам разные уровни контроля над выборкой.Самое простое решение - не объявлять переменную курсора и не разрешать Oracle решать проблемы.Но вам нужно наложить псевдоним возвращаемого значения в проекции.
Итак, вот простой тип с методом ...
create or replace type test_t as object
( n number
, member procedure do_something(x number)
);
/
create or replace type body test_t as
member procedure do_something (x number)
is
begin
dbms_output.put_line(self.n + x);
end;
end;
/
Мы создаем таблицу для этого типа..
create table t23 of test_t
/
insert into t23 values (41)
/
insert into t23 values (68)
/
insert into t23 values (71)
/
Теперь поехали:
SQL>
SQL> set serveroutput on
SQL>
SQL> begin
2 for r in ( select value(f) as whatever
3 from t23 f )
4 loop
5 r.whatever.do_something(1);
6 end loop;
7 end;
8 /
42
69
72
PL/SQL procedure successfully completed.
SQL>