次の方法で共有


O2SS0099: ORDER BY 句の ROWNUM はサポートされていません (エラー)

この記事では、Sql Server Migration Assistant (SSMA) for Oracle が Oracle in ORDER BY 句を含むROWNUMステートメントを変換できない理由について説明します。

背景

Oracle ROWNUM 擬似列は、テーブルから行が選択された順序を示す数値を返します。 選択した最初の1行には a ROWNUM があり、2 番目の行には次ROWNUM2の行があります。

SSMA は in ORDER BY 句をROWNUM変換するときに、ほとんどの場合、エラーなしでエミュレーション手法を使用ROW_NUMBER()します。 ただし、句が ORDER BY クエリの UNION 一部として使用されている場合、SSMA はエラー メッセージを生成します。

次の例を確認してください。

SELECT city
FROM customers

UNION

SELECT city
FROM employees
ORDER BY ROWNUM;

SSMA で前のコードを変換しようとすると、次のエラー メッセージが生成されます。

O2SS0099: ORDER BY 句の ROWNUM はサポートされていません

考えられる対処方法

解決策は、かっこを使用してサブ クエリを作成して式を簡略化することです。 サブクエリを作成すると、句で in 句がORDER BYUNION分離ROWNUMされ、式が単純になります。

簡略化されたクエリの例を次に示します。

SELECT
    city
FROM
    (SELECT city FROM customers
     UNION
     SELECT city FROM employees)
ORDER BY
    ROWNUM;

このような状況のほとんどは、エミュレーション、句、または句に対して一意の式を使用ROW_NUMBER()するために、TOPクエリが何を実行し、書き直そうとしているのかをWHEREGROUP BYORDER BY検討してください。