Compartir a través de


O2SS0099: no se admite ROWNUM en la cláusula ORDER BY (error)

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;

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 WHEREcláusulas , GROUP BYo ORDER BY .