In un'applicazione, ho intenzione di troncare e inserire su un database Oracle 12c, ma ho riscontrato questo problema con una colonna IDENTITY
. Anche se l'istruzione INSERT... SELECT
funziona sulla maggior parte degli usi di SELECT
che ho provato, quando questa istruzione ha anche una clausola GROUP BY
, non riesce a funzionare, emettendo un reclamo "espressione ORA-00979: non a GROUP BY
". Di seguito è riportato un codice di esempio:Oracle SQL: come INSERIRE un'istruzione SELECT con una clausola GROUP BY su una tabella con colonna IDENTITY?
create table aux (
owner_name varchar2(20),
pet varchar2(20));
insert into aux values ('Scott', 'dog');
insert into aux values ('Mike', 'dog');
insert into aux values ('Mike', 'cat');
insert into aux values ('John', 'turtle');
create table T1 (
id number generated always as identity,
owner_name varchar2(20),
pet_count number
);
insert into T1 (owner_name, pet_count)
select owner_name, count(*) as pet_count from aux group by owner_name;
select owner_name, count(*) as pet_count from aux group by owner_name;
Funziona sul primo inserimento, ma non riesce sul successivo.
MODIFICA: ho modificato il codice in modo che il problema sia più facile da comprendere e sia ancora riproducibile.
Apprezzo l'aiuto!
Funziona se si utilizza 'select * from (selezionare 'Scott' dal doppio gruppo di 1)'? – GolezTrol
Le colonne di identità sono come le sequenze e sono comunque distinte, qual è il requisito aziendale per il raggruppamento sulle colonne di identità? – vishad
Ho già provato quella selezione incapsulata, ma il problema rimane. @vishad Voglio raggruppare su altre colonne, non sull'identità, per avere una singola voce per le altre colonne, quindi passare questa voce alla nuova tabella insieme all'identità. –