Преобразование из ANSI в Oracle Синтаксис соединения - PullRequest
1 голос
/ 28 февраля 2011

Я хотел бы преобразовать следующий запрос:

SELECT
    request.requestId
FROM
    request
    LEFT OUTER JOIN incident ON incident.requestId = request.requestId
    LEFT OUTER JOIN changeRequest ON changeRequest.requestId = request.requestId

в его эквивалент синтаксиса соединения Oracle. Моя первая попытка:

SELECT
    request.requestId
FROM
    request,
    incident,
    changeRequest
WHERE
    incident.requestId = request.requestId(+)
    AND changeRequest.requestId = request.requestId(+)

не работает из-за ошибки «ORA-01417: таблица может быть внешне присоединена не более чем к одной другой таблице».

Я понимаю, что Oracle рекомендует использовать подход ANSI, однако я "страдаю" от следующей ошибки Oracle:

http://awads.net/wp/2007/06/14/when-ansi-sql-join-syntax-does-not-work-in-oracle/

Спасибо заранее, Бен

Ответы [ 2 ]

7 голосов
/ 28 февраля 2011

У вас (+) не с той стороны, должно быть:

SELECT
    request.requestId
FROM
    request,
    incident,
    changeRequest
WHERE
    incident.requestId (+)= request.requestId
    AND changeRequest.requestId (+)= request.requestId

Кстати, я так понимаю, вы понимаете, что это старый синтаксис Oracle? Oracle уже давно поддерживает соединения ANSI.

0 голосов
/ 04 февраля 2016

К вашему сведению, в нашем болезненном опыте сложные внутренние соединения ANSI в Oracle (версии 10, 11 и 12) иногда вызывают ошибки ORA-00600 (дампы ядра).Мы были вынуждены отозвать многие из наших ANSI-соединений назад к Oracle-соединениям, чтобы избежать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...