O2SS0160:SELECT 语句未转换 (错误)

本文介绍为什么 SQL Server 迁移助手 (SSMA) for Oracle 在两个子句格式ORDER BY不正确的情况下不转换 SELECT 语句。

背景

在某些情况下,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 语句未转换

若要解决上述问题,可以在 Oracle 的源代码中使用 ORDER BY 子句,如下所示:

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:未转换分层查询