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. Иерархический запрос не был преобразован