secuencias secuencia procedimientos insertar funciones developer con campo autoincrementar autoincremental auto_increment 12c sql oracle plsql insert sequence

secuencia - procedimientos y funciones oracle pl/sql



Oracle SQL: use la secuencia en insertar con Seleccionar declaraciĆ³n (2)

¡Probé y el script se ejecutó bien!

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;

¡puedes leer este artículo para entender más! http://www.orafaq.com/wiki/ORA-02287

Básicamente quiero ejecutar la siguiente consulta:

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;

No funciona porque el "número de secuencia no permitido aquí" es un error de SQL. ¿Cómo puedo escribir esto para que Oracle me permita hacer lo que quiero hacer?


Suponiendo que quiera agrupar los datos antes de generar la clave con la secuencia, parece que quiere algo como

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)