O2SS0160: инструкция SELECT не преобразована (ошибка)

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

Фон

Бывают случаи, когда SSMA не может преобразовать сложные SELECT инструкции.

Возможные способы устранения

Существует два сценария, в которых SSMA не преобразует инструкцию SELECT и создает сообщение об ошибке.

Сценарий 1. SELECT DISTINCT оператор используется с CONNECT BY PRIOR инструкцией в иерархическом запросе

Рассмотрим пример ниже.

SELECT DISTINCT
    empno,
    MGR,
    ename
FROM
    emp
START WITH MGR = 7902
CONNECT BY PRIOR MGR = empno;

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

O2SS0160: инструкция SELECT не преобразована

Чтобы устранить описанную выше проблему, можно использовать ORDER BY предложение в исходном коде Oracle, как показано ниже:

SELECT DISTINCT
    empno,
    MGR,
    ename
FROM
    emp
START WITH MGR = 7902
CONNECT BY PRIOR MGR = empno
ORDER BY empno;

Запрос выше должен быть успешно преобразован функцией SSMA.

Сценарий 2. ORDER BY предложение сортирует результирующий набор на основе двух столбцов или полей, но вы указали только один столбец или поле в SELECT предложении

Рассмотрим пример ниже.

SELECT Empno
FROM emp
ORDER BY 1, 2;

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

O2SS0160: инструкция SELECT не преобразована

Чтобы устранить эту ошибку, сократите число полей или столбцов в ORDER BY предложении или добавьте дополнительные поля или столбцы в SELECT предложении.

Вот обновленный запрос, в котором мы удалили ссылку на вторую колонку из ORDER BY :

SELECT Deptno
FROM emp
ORDER BY 1;

Запрос выше должен быть успешно преобразован функцией SSMA.

  • O2SS0268: невозможно преобразовать иерархический запрос с внешним соединением
  • O2SS0285: иерархический запрос не преобразован