Oracle с удалением по номеру строки
Я пишу процедуру, которая удаляет старые строки по дате их просмотра:
;WITH pv AS (
SELECT
RN = ROW_NUMBER() OVER (ORDER BY viewed DESC)
FROM
previouslyViewed
WHERE
userId = @userId
)
DELETE FROM pv WHERE RN >= 10
Это работает в SQL Server, но не в Oracle.
Oracle не поддерживает комбинацию WITH DELETE. Также он не поддерживает комбинацию DELETE ORDER BY (которую теоретически можно использовать с rownum для достижения того же результата). Я попытался создать временное представление с помощью rownum и удалить из него, но я получаю ошибку Oracle - похоже, вы не можете удалить из представления при использовании rownum.
У кого-нибудь есть указатели?
1 ответ
Решение
Вы могли бы сделать это вместо этого:
DELETE FROM previouslyViewed WHERE pkcol IN
( SELECT pkcol FROM
(
SELECT pkcol, ROW_NUMBER() OVER (ORDER BY viewed DESC) RN
FROM previouslyViewed
WHERE userId = :userId
)
WHERE RN >= 10
);
(изменение pkcol
к столбцу (ам) первичного ключа таблицы)