Поделиться через


O2SS0099: ROWNUM в предложении ORDER BY не поддерживается (ошибка)

В этой статье рассматриваются некоторые причины, по которым Помощник по миграции SQL Server (SSMA) для Oracle не может преобразовать инструкцию, содержащую oracle в ORDER BY предложенииROWNUM.

Общие сведения

Псевдокумун Oracle ROWNUM возвращает число, указывающее порядок выбора строки из таблицы. Первая строка имеет значение ROWNUM 1; вторая строка имеет значение ROWNUM 2и т. д.

При преобразовании ROWNUM предложения SSMA ORDER BY использует ROW_NUMBER() метод эмуляции в большинстве случаев без ошибок. Однако если ORDER BY предложение используется в рамках UNION запроса, SSMA создает сообщение об ошибке.

Пример

Рассмотрим следующий пример:

SELECT city
FROM customers

UNION

SELECT city
FROM employees
ORDER BY ROWNUM;

При попытке преобразовать предыдущий код в SSMA он создает следующее сообщение об ошибке:

O2SS0099: ROWNUM в предложении ORDER BY не поддерживается

Возможные решения

Решение заключается в том, чтобы упростить выражение, создав вложенный запрос с помощью круглых скобок. Создание вложенного запроса разделяет ROWNUM ORDER BY предложение с предложением UNION , что делает его более простым выражением.

Ниже приведен пример упрощенного запроса:

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

В большинстве этих ситуаций рассмотрим, что запрос пытается выполнить и перезаписать его, чтобы использовать эмуляцию, TOP предложение или использовать ROW_NUMBER() уникальное выражение для ваших WHEREпредложений GROUP BYили ORDER BY предложений.