Ошибка ORA 00936 при использовании левого внешнего соединения + синтаксиса

У меня есть две таблицы: T1 и T2

  • T1 имеет столбец DATE: CT1
  • T2 имеет столбец DATE: CT2

Я хочу оставить внешнее соединение T1 и T2 с условием соединения:

trunc(CT1,'Mi')=trunc(CT2,'Mi')(+)

Когда я пытаюсь запустить этот SQL, я получаю сообщение об ошибке ORA 00936: отсутствует выражение.

Есть идеи, что здесь не так?


person ag112    schedule 25.06.2011    source источник
comment
в основном мой вопрос: может ли оператор (+) применяться к произвольному выражению... если да, то как?   -  person ag112    schedule 25.06.2011


Ответы (2)


Я думаю, что вам нужно поставить оператор (+) сразу после имени столбца, к которому он применяется.

trunc(CT1,'Mi')=trunc(CT2 (+),'Mi')

«Оператор (+) можно применять только к столбцу, а не к произвольному выражению. Однако произвольное выражение может содержать один или несколько столбцов, помеченных оператором (+)». (из http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/queries006.htm)

В любом случае я бы предложил использовать синтаксис ANSI. Он понятнее, функциональнее и портативнее.

person Dave Costa    schedule 25.06.2011
comment
+1 за инструкцию. Я согласен с тем, что закапывание оператора (+) внутри ссылки на функцию не очень читабельно ;-) - person DCookie; 25.06.2011

Попробуйте использовать синтаксис ANSI:

T1 LEFT OUTER JOIN T2 ON TRUNC(CT1,'Mi')=TRUNC(CT2,'Mi')

Синтаксис внешнего соединения (+) имеет некоторые ограничения, это может быть одним из них. Конечно, если вы измените это объединение, вам придется изменить их все — вы не можете смешивать их.

person DCookie    schedule 25.06.2011