beautifier can't parse this code. I must to shutdown a process pl/sql developer, when i try it. Function is compilable.
Thanks.
Code:
FUNCTION get_fact_yield_rate(par_begin_date DATE, par_end_date date) RETURN NUMBER is
cursor c1(cur_begin_date date, cur_end_date date) is
SELECT NVL(
(select sum(res)/months_between(cur_end_date, cur_begin_date) from(
(select
months_between(yr.date_change, lag(yr.date_change,1,cur_begin_date) over (order by yr.date_change))*yr.value as res
FROM t_yield_rate_ross yr
WHERE yr.date_change >= cur_begin_date
and yr.date_change <= cur_end_date
and yr.flag = 1)
union
(select months_between(cur_end_date,prev_date)*val as res from
(SELECT
NVL(
(SELECT yr.value
FROM
t_yield_rate_ross yr
WHERE yr.date_change =
(select min(yr1.date_change)
from t_yield_rate_ross yr1
where yr1.flag = yr.flag
and yr1.date_change >= cur_end_date)
and yr.flag = 1),
(SELECT yr1.value
FROM t_yield_rate_ross yr1
WHERE yr1.date_change =
(SELECT MAX(yr2.date_change)
FROM t_yield_rate_ross yr2
WHERE yr2.date_change <= cur_end_date
AND yr2.flag = yr1.flag)
AND yr1.flag = 0))
as val,
(SELECT yr.date_change
FROM t_yield_rate_ross yr
WHERE yr.date_change =
(select max(yr1.date_change)
from t_yield_rate_ross yr1
where yr1.flag = yr.flag
and yr1.date_change <= cur_end_date
and yr1.date_change >= cur_begin_date)
and yr.flag = 1) as prev_date
FROM DUAL)))), (SELECT yr1.value
FROM t_yield_rate_ross yr1
WHERE yr1.date_change =
(SELECT MAX(yr2.date_change)
FROM t_yield_rate_ross yr2
WHERE yr2.date_change <= cur_end_date
AND yr2.flag = yr1.flag)
AND yr1.flag = 0)) as res from dual;
res_fact_yield_rate number;
begin
open c1(par_begin_date,par_end_date);
fetch c1 into res_fact_yield_rate;
close c1;
return res_fact_yield_rate;
end;