Отсутствует правая скобка ora-00907
SELECT * FROM (
SELECT
ORG_ROADMARK,
COUNT(DISTINCT EQUIP_INITIAL||EQUIP_NUM||move_dtm) AS Billing_Count
FROM CMD_BILLING_INFO
WHERE move_dtm BETWEEN' 01-FEB-12' AND '29-FEB-12'
AND (
(MOVE_TYPE_CD ='ICR' AND EQUIP_STATUS_CD IN ('L','W'))
OR
( MOVE_TYPE_CD ='RLO' AND EQUIP_STATUS_CD ='L' )
OR
( MOVE_TYPE_CD ='RMT' AND EQUIP_STATUS_CD ='W' )
) GROUPBY ORG_ROADMARK
) ORDERBY ORG_ROADMARK
Я получаю пропущенную ошибку правильной скобки для вышеупомянутого sql. Используя этот sql я смог получить результат за месячный период и попытался изменить его, чтобы получить результат за последние 24 месяца месяц за месяцем любые предложения, пожалуйста.
3 ответа
Вам нужно пространство между словами
GROUP
а такжеBY
в вашемGROUP BY
пункт и словаORDER
а такжеBY
в вашемORDER BY
пункт.Хотя это не приведет к синтаксической ошибке, вы почти наверняка не захотите использовать одинарные кавычки рядом с
BETWEEN
, Я настоятельно рекомендую вам также не полагаться на неявные преобразования, поскольку кто-то с другими настройками NLS может захотеть запустить этот код.WHERE move_dtm BETWEEN to_date( '01-FEB-2012', 'DD-MON-YYYY' ) AND to_date( '29-FEB-2012', 'DD-MON-YYYY' )
или же
WHERE move_dtm BETWEEN date '2012-02-01' AND date '2012-02-29'
Есть две причины для исключения ORA-00907.
Во-первых, банально, есть левый парантез - (
- без партнерских правых скобок - )
, Их может быть трудно диагностировать вручную, особенно в большом операторе SQL, но достаточно просто, если у вас есть приличная IDE с функцией сопоставления скобок.
Вторая причина - синтаксическая ошибка в операторе SQL, который содержит скобки. Если мы неправильно введем ключевое слово, Oracle будет рассматривать его как имя объекта. Это может привести к возникновению ряда ошибок, таких как ORA-00905, ORA-00936 и многих других в диапазоне от 00900 до 01499. ORA-00907 является одним из тех. Опять же, приличная IDE поможет здесь: подсветка синтаксиса может помочь нам идентифицировать опечатки, если не выделить ключевые слова, которые мы опечатали.
В вашем конкретном случае кажется вероятным, что ваше сжатие GROUP BY
в одно слово, вероятно, виновником. Вам также нужно будет исправить ORDER BY
,
Проблема вроде неуместна цитата BETWEEN'
BETWEEN' 01-FEB-12' AND '29-FEB-12'