Вот один из вариантов: merge
. (Сегодня 27.05.2020, что находится между начальной и конечной датами, хранящимися в таблице abc
).
Примеры данных:
SQL> select * From abc;
FIN_C START_DATE END_DATE ACCOUNT_CLASS
----- ---------- ---------- -------------
F2018 27.05.2020 29.05.2020 2003
SQL> select * From xyz;
ACCOUNT_NO ACCOUNT_CLASS A
---------- ------------- -
1234 2003
Оператор слияния:
SQL> merge into xyz a
2 using (select account_class,
3 case when sysdate between start_date and end_date then 'Y'
4 else 'N'
5 end ac_no_dr
6 from abc
7 ) x
8 on (a.account_class = x.account_class)
9 when matched then update set a.ac_no_dr = x.ac_no_dr;
1 row merged.
Результат:
SQL> select * From xyz;
ACCOUNT_NO ACCOUNT_CLASS A
---------- ------------- -
1234 2003 Y
SQL>
Итог: вам не нужна ни процедура, ни oop (что неэффективно), так как все можно сделать с помощью одного оператора SQL.
Если - как вы прокомментировали - должна быть процедура, тоже нет проблем:
create or replace procedure p_merge as
begin
merge into xyz a
using (select account_class,
case when sysdate between start_date and end_date then 'Y'
else 'N'
end ac_no_dr
from abc
) x
on (a.account_class = x.account_class)
when matched then update set a.ac_no_dr = x.ac_no_dr;
end;
/