Compartir a través de


O2SS0268: no se puede convertir la consulta jerárquica con combinación externa (error)

En este artículo se describe por qué SQL Server Migration Assistant (SSMA) para Oracle no convierte el bloque PL/SQL cuando OUTER JOIN se usa en consultas jerárquicas.

Contexto

En Oracle, CONNECT BY PRIOR es una condición que identifica la relación entre las filas primarias y las filas secundarias de la jerarquía. OUTER JOIN incluye filas de datos en el conjunto de resultados que no coinciden con la tabla combinada y devuelve estas columnas que faltan como NULL valores.

Cuando se usa una OUTER JOIN cláusula con CONNECT BY PRIOR en consultas jerárquicas, SSMA no convierte la instrucción y genera un mensaje de error.

Ejemplo

En el ejemplo siguiente, use una LEFT OUTER JOIN cláusula con CONNECT BY PRIOR en la consulta jerárquica:

SELECT
    e.empno,
    e1.empno,
    e1.mgr
FROM
    emp e
    LEFT OUTER JOIN emp1 e1
        ON e.empno = e1.empno
CONNECT BY PRIOR e1.mgr = e.deptno;

Posibles remedios

Para resolver el problema anterior, vuelva a escribir el código SQL mediante el método CTE recursivo (Expresión de tabla común) como se indica a continuación:

WITH EMPTEMP (empno, ename, mgr) AS
(
    SELECT
        empno,
        ename,
        MGR
    FROM emp

    UNION ALL

    SELECT
        e.empno,
        e.ename,
        e.MGR
    FROM
        emp e
        JOIN emp1 e1
            ON e1.mgr = e.deptno
)
SELECT
    e2.EMPNO,
    e1.EMPNO AS empno$2,
    e1.mgr
FROM
    EMPTEMP AS e2
    LEFT OUTER JOIN EMP1 AS e1
        ON e2.EMPNO = e1.EMPNO