programing

ORA-02287: 시퀀스 번호는 여기에서 허용되지 않습니다.

madecode 2023. 7. 10. 23:27
반응형

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);

이유는 FAQ에서 확인할 수 있습니다.

다음은 시퀀스를 사용할 수 없는 경우입니다.

SELECT 문의 경우:

  • WHERE 절에서
  • GROUP BY 또는 ORDER BY 절에서
  • DISTINCT 절에서
  • 유니온 또는 교차 또는 마이너스와 함께
  • 하위 쿼리에서

이 쿼리는 예외를 발생시킵니다.

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

이는 다음을 사용하는 쿼리에서 시퀀스 값을 선택할 수 없기 때문입니다.group by

또한, a.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)
);

여기서 실제 해결책을 보지 못한 것이 놀랍습니다.CTE를 사용하는 것은 해결해야 할 문제입니다.다음과 같은 방법이 사용될 것입니다.

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

한 테이블에 데이터를 삽입할 때마다 다른 테이블의 데이터를 가져오는 절별 순서를 사용하여 시퀀스 번호 not allowed Error를 방지하지 마십시오.

이렇게 하세요. 이렇게 시퀀스를 사용할 수 있습니다. 파트별 그룹의 경우, 배치 그룹의 연도별로 @Tony INSERT INTER TO placement_cal(cal_id.nextval, EXtract(YE FROM start_date), 카운트(placement_id)의 다른 답변을 따를 것을 권장합니다.

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

언급URL : https://stackoverflow.com/questions/34546009/ora-02287-sequence-number-not-allowed-here

반응형