something like (made it in 30 seconds, there must be some mistakes) :

select trunc(sysdate - min(date)) into var_begin from table;
select trunc(sysdate - 180) into var_end from table;

for i in var_begin .. var_end
loop
delete table where trunc(date) = trunc(sysdate-i);
commit;
end loop;

idea = deleting day by day ...

I dunno if it would be faster than using a temp table