Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describen algunos de los motivos por los que SQL Server Migration Assistant (SSMA) para Oracle no puede convertir una instrucción que contenga Oracle ROWNUM
en la cláusula .ORDER BY
Fondo
La pseudocolumna de Oracle ROWNUM
devuelve un número que indica el orden en el que se seleccionó una fila de una tabla. La primera fila seleccionada tiene un ROWNUM
de 1
; la segunda fila tiene un ROWNUM
de 2
, etc.
Cuando SSMA convierte la ROWNUM
cláusula in ORDER BY
, usa la técnica de emulación en la ROW_NUMBER()
mayoría de los casos sin error. Sin embargo, si la ORDER BY
cláusula se usa como parte de una UNION
consulta, SSMA genera un mensaje de error.
Ejemplo
Considere el ejemplo siguiente:
SELECT city
FROM customers
UNION
SELECT city
FROM employees
ORDER BY ROWNUM;
Al intentar convertir el código anterior en SSMA, genera el siguiente mensaje de error:
O2SS0099: no se admite ROWNUM en la cláusula ORDER BY
Posibles soluciones
La solución consiste en simplificar la expresión mediante la creación de una subconsulta mediante paréntesis. Al crear la subconsulta se separa en ROWNUM
la ORDER BY
cláusula con la UNION
cláusula , lo que lo convierte en una expresión más sencilla.
Este es un ejemplo de la consulta simplificada:
SELECT
city
FROM
(SELECT city FROM customers
UNION
SELECT city FROM employees)
ORDER BY
ROWNUM;
Mensajes de conversión relacionados
- O2SS0021: instrucción con ROWNUM no convertido (error)
- O2SS0039:
ROWNUM
no se puede convertir la pseudocolumna - O2SS0081: asterisco no admitido y
ROWNUM
enSELECT
instrucciones - O2SS0412:
ROWNUM
conGROUPING SETS
no se puede convertir
En la mayoría de estas situaciones, tenga en cuenta lo que intenta lograr la consulta y volver a escribirla para usar la ROW_NUMBER()
emulación, TOP
la cláusula o usar una expresión única para las WHERE
cláusulas , GROUP BY
o ORDER BY
.