Последовательность в SQL Select - PullRequest
8 голосов
/ 07 августа 2009

У меня небольшая проблема с использованием моей последовательности в операторе SELECT.

SELECT
     c.cust_name,
     c.site,
     customer_id_seq.nextval    
FROM
     customer c
WHERE
     c.customer_id IS NULL
ORDER BY
     c.site_code ASC
;

выдает ошибку:

  1. 00000 - «здесь не разрешен порядковый номер» * Причина: указанный порядковый номер (CURRVAL или NEXTVAL) равен несоответствующий здесь в заявлении. * Действие: Удалить порядковый номер.

Вероятно, что-то очевидно, что я делаю не так, надеюсь, это будет простой ответ

Ответы [ 3 ]

14 голосов
/ 07 августа 2009

Нельзя использовать последовательности в запросах с ORDER BY.

Удалите ORDER BY или вставьте в подзапрос:

SELECT  q.*, customer_id_seq.nextval    
FROM    (
        SELECT  c.cust_name,
                c.site
        FROM    customer c
        WHERE   c.customer_id IS NULL
        ORDER BY
                c.site_code ASC
        ) q
1 голос
/ 09 августа 2009

Почему вы не используете rownum вместо извлечения значений из последовательности?

1 голос
/ 07 августа 2009

для IBM Imformix

В операторе SELECT нельзя указывать NEXTVAL или CURRVAL в следующих контекстах:

  • В списке проекций при использовании ключевого слова DISTINCT
  • В предложениях WHERE, GROUP BY или ORDER BY
  • В подзапросе
  • Когда оператор UNION объединяет операторы SELECT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...