Você está recebendo na ordem em que está porque está ordenando por uma string (e isso não funcionaria porque você não está selecionando nada).
Você pode ordenar pelo modelo de formato usado para criar o dia da semana em forma numérica,
D
, mas como domingo é 1 neste eu recomendaria usar mod()
para fazer este trabalho. ou seja, assumindo a tabela
create table a ( b date );
insert into a
select sysdate - level
from dual
connect by level <= 7;
Isso funcionaria:
select mod(to_char(b, 'D') + 5, 7) as dd, to_char(b, 'DAY')
from a
order by mod(to_char(b, 'D') + 5, 7)
Aqui está um SQL Fiddle para demonstrar.
No seu caso, sua consulta se tornaria:
select ename, to_char(hiredate,'fmDay') as "Day"
from my_table
order by mod(to_char(hiredate, 'D') + 5, 7)