2013-11-21 36 views
0

我們試圖從Oracle遷移到Postgres。我們使用ora2pg,但我們有一個錯誤與此代碼:從Oracle到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