Не могу найти ORA-00907: отсутствует правильная скобка - PullRequest
0 голосов
/ 18 января 2019

Я не знаю, что не так с этим синтаксисом.

SELECT Count (id_conv) AS NUM_CAMP 
FROM   csd_mx_mae_camp_dro 
WHERE  id_conv = (SELECT id_conv 
                  FROM   csd_mx_mae_conv_dro 
                  WHERE  num_cta = 60385300500) 
       AND id_cncpt = (SELECT A.id_cncpt 
                       FROM   csd_mx_mae_camp_dro A 
                              INNER JOIN csd_mx_mae_cncpt_dro B 
                                      ON A.id_cncpt = B.id_cncpt 
                       WHERE  ( ( flg_tipo_camp = 'A' 
                                  AND txt_nombr_clase_logic IS NOT NULL ) 
                                 OR ( flg_tipo_camp = 'C' ) ) 
                              AND txt_nom NOT IN ( 'Concepto' ) 
                              AND B.txt_cve = '84' 
                              AND A.id_conv = (SELECT id_conv 
                                               FROM   csd_mx_mae_conv_dro 
                                               WHERE  num_cta = 60385300500) 
                              AND rownum = 1 
                       ORDER  BY id_cmp) 
       AND flg_tipo_camp = 'A'; 

Ожидаемый результат - 4, учитывая мои записи в БД, однако у меня есть ошибка, упомянутая в заголовке (ORA-00907: отсутствует правильная скобка 00907. 00000 - «отсутствует правая скобка» * Причина: * Действие: Ошибка в строке: 171, столбец: 90).

1 Ответ

0 голосов
/ 18 января 2019

Есть несколько подзапросов, где ORDER BY имеет смысл - и это разрешено синтаксисом.

Однако вы используете ORDER BY в скалярном подзапросе - тот, который требуетсядля возврата одного значения (одна строка / один столбец), и такие подзапросы не позволяют ORDER BY.

Вы используете его в любом случае неправильно (скорее всего) - вы ограничиваете количество строк до 1 с помощьюусловие ROWNUM = 1, которое в сочетании с вашим ORDER BY, вероятно, означает, что вы хотели заказать по ID_CMP, а затем взять первую строку из результата.Это не так, как это работает;ORDER BY приходит только после того, как ROWNUM назначен в любом случае.Если это то, что вы пытались сделать, удалите ORDER BY, а также условие для ROWNUM и вместо этого выберите MIN(ID_CMP) в предложении SELECT скалярного подзапроса.

Конкретная ошибка, связанная сотсутствующая правая скобка вызвана предложением ORDER BY: в этот момент в скалярном подзапросе синтаксический анализатор ожидает закрывающую скобку для подзапроса, а не любой другой токен / предложение / что угодно.

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