create or replace function fn_get_next_monthly_date(i_in_date date)
return date
is
l_date date;
l_mb int;
begin
l_mb := months_between(sysdate, i_in_date);
l_date := add_months(i_in_date, l_mb);
return add_months(l_date, 1);
end fn_get_next_monthly_date;
select fn_get_next_monthly_date(to_date('25/03/1999', 'dd/mm/yyyy')) from dual
select fn_get_next_monthly_date(to_date('28/03/1999', 'dd/mm/yyyy')) from dual