この記事では、Sql Server Migration Assistant (SSMA) for Oracle が Oracle in ORDER BY
句を含むROWNUM
ステートメントを変換できない理由について説明します。
背景
Oracle ROWNUM
擬似列は、テーブルから行が選択された順序を示す数値を返します。 選択した最初の1
行には a ROWNUM
があり、2 番目の行には次ROWNUM
2
の行があります。
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 BY
UNION
分離ROWNUM
され、式が単純になります。
簡略化されたクエリの例を次に示します。
SELECT
city
FROM
(SELECT city FROM customers
UNION
SELECT city FROM employees)
ORDER BY
ROWNUM;
関連する変換メッセージ
- O2SS0021: ROWNUM が変換されていないステートメント (エラー)
- O2SS0039:
ROWNUM
擬似列を変換できません - O2SS0081: サポートされていないアスタリスクと
ROWNUM
inSELECT
ステートメント - O2SS0412:
ROWNUM
withGROUPING SETS
を変換できません
このような状況のほとんどは、エミュレーション、句、または句に対して一意の式を使用ROW_NUMBER()
するために、TOP
クエリが何を実行し、書き直そうとしているのかをWHERE
GROUP BY
ORDER BY
検討してください。