Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются некоторые причины, по которым Помощник по миграции 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;
Связанные сообщения преобразования
- O2SS0021. Оператор с ROWNUM не преобразован (ошибка)
- O2SS0039:
ROWNUM
псевдоколум не может быть преобразован - O2SS0081: неподдерживаемая звездочка и
ROWNUM
вSELECT
инструкциях - O2SS0412:
ROWNUM
невозможноGROUPING SETS
преобразовать
В большинстве этих ситуаций рассмотрим, что запрос пытается выполнить и перезаписать его, чтобы использовать эмуляцию, TOP
предложение или использовать ROW_NUMBER()
уникальное выражение для ваших WHERE
предложений GROUP BY
или ORDER BY
предложений.