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

В этой статье описывается, почему Помощник по миграции SQL Server (SSMA) для Oracle не преобразует SELECT инструкцию в двух сценариях с неправильными ORDER BY предложениями.This article describes why SQL Server Migration Assistant (SSMA) for Oracle does not convert the SELECT statement in two scenarios that have ill formed ORDER BY clauses.

Историческая справкаBackground

Бывают случаи, когда SSMA не может преобразовать сложные SELECT инструкции.There are cases when SSMA cannot convert complex SELECT statements.

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

Существует два сценария, в которых SSMA не преобразует инструкцию SELECT и создает сообщение об ошибке.There are two scenarios, in which SSMA doesn't convert the select statement and generate an error message.

Сценарий 1. SELECT DISTINCT оператор используется с CONNECT BY PRIOR инструкцией в иерархическом запросеScenario 1: SELECT DISTINCT statement is used with CONNECT BY PRIOR statement in the hierarchical query

Рассмотрим пример ниже.Consider the example below:

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

При попытке преобразовать приведенный выше код в SSMA выдается следующее сообщение об ошибке:When you try to convert the above code in SSMA, it generates the following error message:

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

Чтобы устранить описанную выше проблему, можно использовать ORDER BY предложение в исходном коде Oracle, как показано ниже:To resolve the above issue, you can use the ORDER BY clause in the source code of Oracle, as shown below:

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

Запрос выше должен быть успешно преобразован функцией SSMA.Above query should be converted successfully by SSMA.

Сценарий 2. ORDER BY предложение сортирует результирующий набор на основе двух столбцов или полей, но вы указали только один столбец или поле в SELECT предложенииScenario 2: ORDER BY clause sorts the result set based on the two columns/fields but you have specified only one column/field in SELECT clause

Рассмотрим пример ниже.Consider the example below:

SELECT Empno
FROM emp
ORDER BY 1, 2;

При попытке преобразовать приведенный выше код в SSMA выдается следующее сообщение об ошибке:When you try to convert the above code in SSMA, it generates the following error message:

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

Чтобы устранить эту ошибку, сократите число полей или столбцов в ORDER BY предложении или добавьте дополнительные поля или столбцы в SELECT предложении.To solve this error either reduce the number of field/column in ORDER BY clause or add additional fields/columns in SELECT clause.

Вот обновленный запрос, в котором мы удалили ссылку на вторую колонку из ORDER BY :Here is updated query where we removed second column reference from the ORDER BY:

SELECT Deptno
FROM emp
ORDER BY 1;

Запрос выше должен быть успешно преобразован функцией SSMA.Above query should be converted successfully by SSMA.

  • O2SS0268: невозможно преобразовать иерархический запрос с внешним соединениемO2SS0268: Hierarchical query with outer join cannot be converted
  • O2SS0285: иерархический запрос не преобразованO2SS0285: Hierarchical query was not converted