2011-07-27 5 views
2

에 의해 삭제 :오라클은 내가 그들의 볼 날짜를 기준으로 오래된 행을 제거하는 절차를 쓰고 행 번호

;WITH pv AS (
    SELECT 
     RN = ROW_NUMBER() OVER (ORDER BY viewed DESC) 
    FROM 
     previouslyViewed 
    WHERE 
     userId = @userId 
) 
DELETE FROM pv WHERE RN >= 10 

이 오라클에서 SQL 서버에서 작동하지만,하지.

오라클은 WITH DELETE 조합을 지원하지 않습니다. 또한 DELETE ORDER BY 조합 (이론적으로 동일한 결과를 얻기 위해 rownum과 함께 사용할 수 있음)을 지원하지도 않습니다. 나는 rownum으로 임시 뷰를 생성하고 삭제하려고 시도했지만 오라클 에러가 발생합니다. rownum이 사용되면 뷰에서 삭제할 수없는 것처럼 보입니다.

누구에게도 포인터가 있습니까?

답변

4

대신이 작업을 수행 할 수 있습니다 :

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 변경)