2

表示日までに古い行を削除するプロシージャを作成しています。

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

これはSQLServerでは機能しますが、Oracleでは機能しません。

Oracleは、WITHDELETEの組み合わせをサポートしていません。また、DELETE ORDER BYの組み合わせもサポートしていません(理論的には、同じ結果を達成するためにrownumと一緒に使用できます)。rownumを使用して一時ビューを作成し、そこから削除しようとしましたが、Oracleエラーが発生します。rownumが使用されている場合、ビューから削除できないようです。

誰かがポインタを持っていますか?

4

1 に答える 1

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

于 2011-07-27T11:08:20.527 に答える