Não consigo entender como um empresa do porte da Oracle não teve a capacidade de pensar em uma função como essa. Depois do LAST_DAY, apresento a vocês o FIRST_DAY.
Selecionar tudo
create or replace
FUNCTION FIRST_DAY (pDATA IN DATE DEFAULT SYSDATE) RETURN DATE AS
begin
--Retorna o primeiro dia do mês passado no parâmetro
RETURN last_day(add_months(pDATA,-1))+1;
END FIRST_DAY;
Pra testar....
Selecionar tudo
SQL> select first_day(sysdate)
2 , last_day(sysdate)
3 from dual
4 /
FIRST_DAY(SYSDATE) LAST_DAY(SYSDATE)
------------------ -----------------
01/03/2011 31/03/2011
Encontrado no ambiente de produção.