Как переписать Oracle SQL-оператор для соответствия ANSI-98 и преобразовать в формат DB2 - PullRequest
0 голосов
/ 24 июня 2019

Как преобразовать этот старый оператор SQL оракула в соответствие с требованиями DB2 ANSI 98:

SELECT 
    O.OBJECT_NAME AS OBJECT_NAME,
    ATT.ATTRIBUTE_NAME AS ATTRIBUTE_NAME, 

    (CASE WHEN R.RULE_NAME = 'LAST_UPDATE' THEN 1 
          WHEN R.RULE_NAME = 'SOURCE_SUPREMACY' THEN 2 
          ELSE 3 END) 

    ID_RULE, 
    RD.SRC_CODE, 
    RD.WEIGTH 
FROM 
    XOBJRULE ORL, 
    XOBJECT O, 
    XATTRIBUTE ATT, 
    XRULE R, 
    XOBJRULEDET RD, 
    CDSOURCEIDENTTP S   
WHERE 
    ORL.ID_OBJECT = O.ID_OBJECT(+) AND 
    ORL.ID_ATTRIBUTE = ATT.ID_ATTRIBUTE(+) AND 
    ORL.ID_RULE = R.ID_RULE AND 
    R.ID_RULE = RD.ID_RULE(+) AND 
    RD.SRC_CODE = S.SOURCE_IDENT_TP_CD(+) AND 
    ORL.PERSON_ORGANIZATION IN (1,3) 
ORDER BY 1,2,5 ASC

Этот оператор SQL был извлечен из отладки Java. Как я мог бы просто преобразовать его в формат DB2 без значительных изменений, чтобы мне не нужно было пересматривать логику кода Java?

1 Ответ

3 голосов
/ 24 июня 2019

В запросе используется собственный синтаксис внешнего соединения Oracle (+).Для DB2 вам необходимо преобразовать все объединения в явный синтаксис объединения ANSI SQL 92: LEFT OUTER JOIN.

...
FROM 
    XOBJRULE ORL
    left outer join XOBJECT O on ORL.ID_OBJECT = O.ID_OBJECT
    left outer join XATTRIBUTE ATT on ORL.ID_ATTRIBUTE = ATT.ID_ATTRIBUTE 
    inner join XRULE R on ORL.ID_RULE = R.ID_RULE 
    left outer join XOBJRULEDET RD on R.ID_RULE = RD.ID_RULE 
    left outer join CDSOURCEIDENTTP S on RD.SRC_CODE = S.SOURCE_IDENT_TP_CD 
WHERE ORL.PERSON_ORGANIZATION IN (1,3) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...