Em uma expressão SELECT, a cláusula WHERE é executada antes da cláusula ORDER BY. Considere esse exemplo:
DECLARE
CURSOR usuarios_recentes IS
SELECT usuario.nome,
usuario.data_de_criacao
FROM usuario
WHERE ROWNUM <= 5
ORDER BY usuario.data_de_criacao DESC;
BEGIN
...
Essa consulta não retornará os últimos 5 usuários criados. O banco de dados filtrará os usuários sem nenhuma ordenação e só então aplicará a cláusula ORDER BY. A consulta corrigida é:
DECLARE
CURSOR usuarios_recentes IS
SELECT nome,
data_de_criacao
FROM (SELECT usuario.nome,
usuario.data_de_criacao
FROM usuario
ORDER BY user.data_de_criacao DESC)
WHERE ROWNUM <= 5;
BEGIN
...