((SELECT ES.MCH_POS
FROM IFSAPP.EQUIPMENT_SERIAL ES
WHERE ES.CONTRACT = W.CONTRACT
AND ES.MCH_CODE = W.MCH_CODE), 'yyyy/mm/dd') as SALE_DATE
Когда я запускаю этот код, возникает ошибка как ORA-00907: missing right parenthesis
@Chamara: это похоже на часть более крупного оператора SQL. Пожалуйста, опубликуйте весь код SQL для более точной диагностики!
Это часть Заявления.
Так что покажите все заявление. Часть, которую вы показываете, похоже, находится в предложении select, и если ей предшествует TO_CHAR
или TO_DATE
, синтаксически в этом нет ничего плохого. Не увидев всего заявления, мы не сможем вам помочь. Разве Oracle не сообщает вам, в какой строке оператора возникает ошибка?
SQL слишком длинный. Ошибка отображается в четвертой строке. Через запятую.
ORA-00907: missing right parenthesis
Это синтаксическая ошибка. Иногда это действительно означает, что у нас есть непарная левая скобка. Чаще всего это означает, что мы сделали блумер и у нас есть ключевое слово или выражение, в которых компилятор ожидал закрывающего )
. Иногда это просто указывает на опечатку.
, 'yyyy/mm/dd'
- это маска формата, используемая при преобразовании строки в дату или даты в строку. Однако в вашем фрагменте нет функции TO_DATE () или TO_CHAR (), поэтому я предполагаю, что это ваша проблема. У вас есть маска формата, в которой, по мнению компилятора, должен быть только )
.
С помощью простого подзапроса трудно быть уверенным, но, вероятно, вам нужно что-то вроде этого:
(SELECT to_char(ES.MCH_POS, 'yyyy/mm/dd') as SALE_DATE
FROM IFSAPP.EQUIPMENT_SERIAL ES
WHERE ES.CONTRACT = W.CONTRACT
AND ES.MCH_CODE = W.MCH_CODE)
Если это не то решение, которое вам нужно, и оно не помогает вам найти его, пожалуйста, отредактируйте свой вопрос, чтобы включить более подробную информацию о проблеме, которую вы пытаетесь решить.
В Oracle вам нужна функция to_char()
TO_CHAR(date-value,'date-format-mask')
Из вашего фрагмента кода он должен выглядеть больше примерно в этих строках 9, я думаю):
select ....
, to_char((SELECT ES.MCH_POS
FROM IFSAPP.EQUIPMENT_SERIAL ES
WHERE ES.CONTRACT = W.CONTRACT
AND ES.MCH_CODE = W.MCH_CODE
AND rownum = 1), 'yyyy/mm/dd') as SALE_DATE
т.е. коррелированный подзапрос возвращает одно значение даты, и это значение даты затем форматируется как гггг / мм / дд
nb: Я добавил and rownum = 1
, потому что, как вы видите выше, этот коррелированный подзапрос ДОЛЖЕН возвращать только одно значение даты.
это только часть Заявления или всего Заявления?