ORA-02287: порядковый номер не разрешен здесь

Я пытаюсь выбрать значения из двух таблиц и вставить их в одну таблицу и вычислить количество мест размещения в год. Я продолжаю получать сообщение о том, что последовательность здесь не разрешена.

DROP table placement_cal CASCADE CONSTRAINTS;

CREATE TABLE placement_cal(
    cal_id  INTEGER NOT NULL,
    year    INTEGER,
    no_of_placements INTEGER,
    CONSTRAINT  pk_cal_dim PRIMARY KEY (cal_id)
);


INSERT INTO placement_cal (
SELECT cal_id.nextval  , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement
group by year);

INSERT INTO placement_cal (
SELECT cal_id.nextval  , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement_two
group by year);

Ответ 1

Вы можете получить причину в FAQ

Ниже перечислены случаи, когда вы не можете использовать последовательность:

Для оператора SELECT:

  • В предложении WHERE
  • В предложении GROUP BY или ORDER BY
  • В предложении DISTINCT
  • Наряду с UNION или INTERSECT или MINUS
  • В подзапросе

Ответ 2

Этот запрос вызывает исключение:

SELECT cal_id.nextval  , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement
group by year;

Это потому, что вы не можете выбрать значение последовательности в запросе с предложением group by.

Кроме того, предложение group by должно включать все неагрегированные выражения из предложения select, чего нет у вас. Я предполагаю, что year является псевдонимом EXTRACT(YEAR FROM start_date), и в этом случае это запрос, который вам нужен:

INSERT INTO placement_cal
SELECT cal_id.nextval, year, cnt FROM
( SELECT EXTRACT(YEAR FROM start_date) year, count(placement_id) cnt
  FROM placement
  group by EXTRACT(YEAR FROM start_date)
);

Ответ 3

Сделайте это следующим образом. Вы можете использовать последовательность, подобную этой, для группы по частям я рекомендую вам следовать другому ответу из @Tony INSERT INTO place_cal (cal_id.nextval, EXTRACT (YEAR FROM start_date), count (place_id) FROM группы размещения по год);

INSERT INTO placement_cal (
cal_id.nextval  , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement_two
group by year);