2013-11-21 4 views
0

우리는 오라클에서 Postgres 로의 마이그레이션을 시도했습니다. 우리는 ora2pg 사용하지만, 우리는이 코드에 오류가 있습니다오라클에서 Postgres로

SELECT DISTINCT UPU.USUA_C_USUARIO 
    FROM GN_USUARIOS U,TR_USUARIOS_X_PERFILES_USUARIO UPU,TR_V_PERFILES_USUARIOS PU 
    WHERE (U.C_USUARIO = UPU.USUA_C_USUARIO(+)) 
    AND (UPU.PEUS_X_PEUS = PU.X_PEUS) 
    AND U.C_USUARIO = USU.C_USUARIO)) 
    OR NOT EXISTS (
    SELECT UPU2.USUA_C_USUARIO 
    FROM TR_USUARIOS_X_PERFILES_USUARIO UPU2 
    WHERE UPU2.USUA_C_USUARIO = USU.C_USUARIO) 
    OR USER = (
     SELECT V_CONSTANTE 
     FROM GN_CONSTANTES 
     WHERE C_CONSTANTE = 'TRUSUPROP') 

우리는 PU.USUA_C_USUARIO (+)에 오류가 있습니다. 우리는 이런 종류의 전환에 충분한 경험이 없습니다. LEFT OUTER JOIN을 사용하여 코드를 변환하려면 어떻게해야합니까?

감사합니다.

답변

0

아마 너무 좋아 :

FROM GN_USUARIOS U 
LEFT JOIN TR_USUARIOS_X_PERFILES_USUARIO UPU ON U.C_USUARIO = UPU.USUA_C_USUARIO 
LEFT JOIN TR_V_PERFILES_USUARIOS PU ON UPU.PEUS_X_PEUS = PU.X_PEUS 
WHERE U.C_USUARIO = USU.C_USUARIO) 

또는 가능성 : 어느 경우

FROM GN_USUARIOS U 
LEFT JOIN (SELECT UPU.USUA_C_USUARIO, ... 
      FROM TTR_USUARIOS_X_PERFILES_USUARIO UPU 
      JOIN TR_V_PERFILES_USUARIOS PU ON UPU.PEUS_X_PEUS = PU.X_PEUS 
     ) UPU_PU ON U.C_USUARIO = UPU_PU.USUA_C_USUARIO 
WHERE U.C_USUARIO = USU.C_USUARIO) 

는 쿼리에 USU의 어디에도 정의되지 않은 테이블과 일치하지 않는 괄호가 있음을주의해야합니다.

+0

내 쿼리는 문제가있는 부분이며 USU는 전체 쿼리에 정의되어 있습니다. 그리고 잃어버린 괄호는 편집상의 문제입니다. :) 두 가지 솔루션이 완벽하게 작동합니다. 감사. – Luallo