source

Oracle SQL: Select Statement와 함께 시퀀스 삽입 사용

gigabyte 2023. 3. 5. 09:51
반응형

Oracle SQL: Select Statement와 함께 시퀀스 삽입 사용

기본적으로 다음 쿼리를 실행합니다.

INSERT INTO historical_car_stats (historical_car_stats_id, year, month, make, model, region, avg_msrp, count)
  SELECT
    my_seq.nextval,
    '2010',
    '12',
    'ALL',
    'ALL',
    region,
    sum(avg_msrp * count) / sum(count),
    sum(count)
  FROM historical_car_stats
  WHERE year = '2010'
        AND month = '12'
        AND make != 'ALL'
  GROUP BY region;

시퀀스 번호는 여기서 허용되지 않습니다.SQL 오류 때문에 작동하지 않습니다.Oracle이 원하는 작업을 수행할 수 있도록 하려면 어떻게 해야 합니까?

시퀀스를 사용하여 키를 생성하기 전에 데이터를 그룹화한다고 가정하면 다음과 같은 것을 원하는 것처럼 들립니다.

INSERT INTO HISTORICAL_CAR_STATS (
    HISTORICAL_CAR_STATS_ID, 
    YEAR,
    MONTH, 
    MAKE,
    MODEL,
    REGION,
    AVG_MSRP,
    CNT) 
SELECT MY_SEQ.nextval,
       year,
       month,
       make,
       model,
       region,
       avg_msrp,
       cnt
  FROM (SELECT '2010' year,
               '12' month,
               'ALL' make,
               'ALL' model,
               REGION,
               sum(AVG_MSRP*COUNT)/sum(COUNT) avg_msrp,
               sum(cnt) cnt
          FROM HISTORICAL_CAR_STATS
         WHERE YEAR = '2010' 
           AND MONTH = '12'
           AND MAKE != 'ALL' 
         GROUP BY REGION)

테스트를 해봤더니 스크립트는 정상적으로 실행이 됩니다!

INSERT INTO HISTORICAL_CAR_STATS (HISTORICAL_CAR_STATS_ID, YEAR,MONTH,MAKE,MODEL,REGION,AVG_MSRP,COUNT) 
WITH DATA AS
(
    SELECT '2010' YEAR,'12' MONTH ,'ALL' MAKE,'ALL' MODEL,REGION,sum(AVG_MSRP*COUNT)/sum(COUNT) AVG_MSRP,sum(Count) COUNT
    FROM HISTORICAL_CAR_STATS
    WHERE YEAR = '2010' AND MONTH = '12'
    AND MAKE != 'ALL' GROUP BY REGION
)
SELECT MY_SEQ.NEXTVAL, YEAR,MONTH,MAKE,MODEL,REGION,AVG_MSRP,COUNT
FROM DATA;

자세한 내용은 이 기사를 읽어주세요!http://www.orafaq.com/wiki/ORA-02287

언급URL : https://stackoverflow.com/questions/7125936/oracle-sql-use-sequence-in-insert-with-select-statement

반응형