Algo como:
SELECT mes,
ano,
to_number(to_char(dt_mes_anterior, 'MM')) mes_ant,
to_number(to_char(dt_mes_anterior, 'YYYY')) ano_ant
FROM (SELECT mes,
ano,
add_months(to_date(lpad(mes, 2, '0') || ano
, 'MM/YYYY'), -1) dt_mes_anterior
FROM t);
Exemplo:
————————————————————————————————————————————————-
SQL> with t as (
2 select 1 mes, 2010 ano from dual)
3 -- fim dados de exemplo
4 SELECT mes,
5 ano,
6 to_number(to_char(dt_mes_anterior, 'MM')) mes_ant,
7 to_number(to_char(dt_mes_anterior, 'YYYY')) ano_ant
8 FROM (SELECT mes,
9 ano,
10 add_months(to_date(lpad(mes, 2, '0') || ano
11 , 'MM/YYYY'), -1) dt_mes_anterior
12 FROM t);
MES ANO MES_ANT ANO_ANT
---------- ---------- ---------- ----------
1 2010 12 2009
SQL>