правая скобка отсутствует 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 месяца, месяц за месяцем, любые предложения, пожалуйста.


person user1445761    schedule 09.06.2012    source источник
comment
Не могли бы вы отформатировать свой код, чтобы людям было легче его читать. Поверьте, сначала сделайте это, а потом посмотрите, сможете ли вы найти пропавшее)   -  person Preet Sangha    schedule 09.06.2012


Ответы (3)


  1. Вам нужен пробел между словами GROUP и BY в предложении GROUP BY и словами ORDER и BY в предложении ORDER BY.

  2. Хотя это не вызовет синтаксической ошибки, вы почти наверняка не захотите ставить одинарную кавычку рядом с BETWEEN. Я настоятельно рекомендую вам также не полагаться на неявные преобразования, поскольку кто-то с другими настройками NLS может захотеть запустить этот код.

    WHERE move_dtm BETWEEN to_date( '01-FEB-2012', 'DD-MON-YYYY' ) 
                   AND to_date( '29-FEB-2012', 'DD-MON-YYYY' )
    

    or

    WHERE move_dtm BETWEEN date '2012-02-01' AND date '2012-02-29'
    
person Justin Cave    schedule 09.06.2012
comment
Уважаемый Джастин, Большое спасибо за вашу поддержку. Теперь я хочу разбить этот отчет, чтобы показать количество месяцев за месяцем. В настоящее время я могу получить общий счет для любой даты, и теперь я пытаюсь получить ежемесячный счет для любой даты. Ваш совет очень важен. - person user1445761; 09.06.2012

Есть две причины исключения ORA-00907.

Первый - это банально, что есть левая парантезис - ( - без парной правой скобки - ). Это может быть сложно диагностировать вручную, особенно в большом операторе SQL, но это достаточно просто, если у вас есть приличная среда IDE с функцией сопоставления скобок.

Вторая причина - синтаксическая ошибка в операторе SQL, содержащем квадратные скобки. Если мы неправильно введем ключевое слово, Oracle рассматривает его как имя объекта. Это может привести к появлению ряда ошибок, таких как ORA-00905, ORA-00936 и многих других в диапазон от 00900 до 01499. ORA-00907 - один из таких. Опять же, здесь поможет приличная IDE: выделение синтаксиса может помочь нам выявить опечатки, поскольку мы не можем выделить ключевые слова, которые мы написали с ошибками.

В вашем конкретном случае, вероятно, виновато ваше сжатие GROUP BY в одно слово. Вам также потребуется исправить ORDER BY.

person APC    schedule 09.06.2012

проблема кажется неуместной цитата BETWEEN'

BETWEEN' 01-FEB-12' AND '29-FEB-12'
person Kshitij    schedule 09.06.2012