|
Ispirer SQLWays データベース移行ソフトウェア
Microsoft SQL Server TOP 句を Oracleへ変換
Microsoft SQL Server のTOP 句は SELECT ステートメントで返されるローの数を制限します。 TOP では返されるローの数またはパーセンテージを指定する事ができます。もしTOP句を含む SELECT ステートメントに ORDER BY 句がある場合、返されるローは並べ替え済みの結果セットから選択されます。
Oracle のROWNUM 疑似カラムは結果セットから選択されたローの順番を返します。ROWNUM は Oracle でのローの制限に使用することができますが、ROWNUM は並べ替えが行われる前に割り当てられます。
SQLWays は Microsoft SQL Server のTOP 句を Oracle へ以下のように変換します:
a)TOP 指定の SELECT ステートメントが ORDER BY 句を含まない場合
Microsoft SQL Server で ORDER BY 句が含まれない場合、SQLWays は Oracle の SELECT ステートメントのWHERE句に ROWNUM 疑似カラムを指定することでTOP 句を実装します。
もし TOP に PERCENT 句が指定された場合、SQLWays は、クエリで返されるローの合計数から指定されたパーセンテージに対応するローの数を計算します。
b) TOP 指定のSELECT ステートメントが ORDER BY 句を含む場合
Microsoft SQL Server とは異なり、Oracle では結果セットの並べ替え前に ROWNUM への割り当てを行います。もし Microsoft SQL Server のSELECT ステートメントが ORDER BY 句を含む場合、SQLWays は元のクエリをサブクエリ付きのクエリに変換します。サブクエリで並べ替えを行い、親クエリで ROWNUM によるローの制限をおこないます。