Partager via


O2SS0099 : ROWNUM dans la clause ORDER BY n’est pas pris en charge (Erreur)

Cet article décrit certaines des raisons pour lesquelles Assistant Migration SQL Server (SSMA) pour Oracle ne peut pas convertir une instruction qui contient l’oracle ROWNUM dans ORDER BY la clause.

Background

Le pseudocolumn Oracle ROWNUM retourne un nombre indiquant l’ordre dans lequel une ligne a été sélectionnée à partir d’une table. La première ligne sélectionnée a un ROWNUM de 1; la deuxième ligne a un ROWNUM , 2et ainsi de suite.

Lorsque SSMA convertit la ROWNUM clause in ORDER BY , elle utilise la ROW_NUMBER() technique d’émulation dans la plupart des cas sans erreur. Toutefois, si la ORDER BY clause est utilisée dans le cadre d’une UNION requête, SSMA génère un message d’erreur.

Exemple

Prenons l’exemple suivant :

SELECT city
FROM customers

UNION

SELECT city
FROM employees
ORDER BY ROWNUM;

Lorsque vous essayez de convertir le code précédent dans SSMA, il génère le message d’erreur suivant :

O2SS0099 : ROWNUM dans la clause ORDER BY n’est pas pris en charge

Solutions possibles

La solution consiste à simplifier l’expression en créant une sous-requête à l’aide de parenthèses. La création de la sous-requête sépare la ROWNUM clause de la UNION ORDER BY clause, ce qui en fait une expression plus simple.

Voici un exemple de requête simplifiée :

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

Dans la plupart de ces situations, tenez compte de ce que la requête tente d’accomplir et de réécrire pour utiliser l’émulationROW_NUMBER(), TOP la clause ou utiliser une expression unique pour vos clauses ou GROUP BYORDER BY vos WHEREclauses.