Ваш member procedure
ищет некоторые данные во внешних таблицах, поэтому я создал несколько фиктивных данных, чтобы иметь возможность их протестировать.
Вы можете проверить это, извлекая данные из таблицы, например select value(p) from socios_beneficios p
, но это плохая идея. Зачем? Потому что ваша процедура содержит ошибки. И каждый раз, когда вы исправляете это, вы должны удалить таблицу, потому что у вас будут проблемы при перекомпиляции типа, где существует зависимый объект.
Итак, создайте простую переменную и процедуру тестирования:
declare
v_beneficios t_beneficios;
begin
v_beneficios := t_beneficios(1, tab_ingresos(t_ingresos(11, 101, 1001),
t_ingresos(12, 102, 1002)));
dbms_output.put_line(v_beneficios.f_ordenar);
v_beneficios.p_calcular_ingresos;
end;
Это показало мне, что определения для v_mov_e
и v_mov_p
отсутствуют. И v_mov_excedente
и v_mov_premio
объявлены, но никогда не используются. И есть бесконечный цикл, потому что вы не увеличивали ind
. Итак, исправленная процедура:
member procedure p_calcular_ingresos is
v_mov_e number(3);
v_mov_p number(3);
v_mov_excedente number(3);
v_mov_premio number(3);
v_id_cuenta number(8);
ind number;
begin
select id_tipo into v_mov_e
from aho_tipo_movimiento
where nombre_tipo like '%DE%';
select id_tipo into v_mov_p
from aho_tipo_movimiento
where nombre_tipo like '%P%';
select id_cuenta into v_id_cuenta
from aho_cuenta_ahorro
where id_socio = self.id_socio and rownum = 1;
ind := self.ingresos.first;
while ind <= self.ingresos.last loop
dbms_output.put_line(self.ingresos(ind).excedentes);
dbms_output.put_line(self.ingresos(ind).premios_concedidos);
dbms_output.put_line(v_mov_e);
dbms_output.put_line(v_mov_p);
dbms_output.put_line(v_id_cuenta);
ind := ind + 1;
end loop;
end;
Я не знаю, что он делает, вы, вероятно, что-то строите, так что, я думаю, он еще не закончен. Но теперь он компилируется, и наш просто контрольный пример работает.