Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
, 2
et 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;
Messages de conversion connexes
- O2SS0021 : Instruction avec ROWNUM non convertie (Erreur)
- O2SS0039 :
ROWNUM
pseudocolumn ne peut pas être converti - O2SS0081 : astérisque non pris en charge et
ROWNUM
dansSELECT
les instructions - O2SS0412 :
ROWNUM
impossibleGROUPING SETS
de convertir
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 BY
ORDER BY
vos WHERE
clauses.