Когда вы используете ORDER BY с ROWNUM, сначала применяется ROWNUM, поэтому вы не получите ожидаемых результатов.Вы можете изменить свой SQL на:
delete from myTable where pk not in
( SELECT pk FROM
( SELECT pk FROM myTable order by created DESC)
where rownum <5
)
Есть много других способов написать это.Если таблица большая и большинство строк будут удалены, возможно, это будет быстрее:
delete from myTable where created <
( SELECT MIN(created) FROM
( SELECT created FROM myTable order by created DESC)
where rownum <5
)