W aplikacji zamierzam skracać i wstawiać do bazy danych Oracle 12c, ale znalazłem ten problem w kolumnie IDENTITY
. Mimo że instrukcja INSERT... SELECT
działa na większości użytych przeze mnie SELECT
zastosowań, które próbowałem, gdy ta instrukcja ma również klauzulę GROUP BY
, to nie działa, wydając "skargę ORA-00979: nie jest to wyrażenie o adresie GROUP BY
". Poniżej znajduje się przykładowy kod:Oracle SQL: W jaki sposób wstawić instrukcję SELECT z klauzulą GROUP BY do tabeli z kolumną 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;
Działa na pierwszej wstawce, ale kończy się niepowodzeniem.
EDYCJA: Zmieniono kod, więc kwestia jest łatwiejsza do zrozumienia, a jednocześnie możliwa do odtworzenia.
Doceń pomoc!
Czy to działa, jeśli użyjesz 'wybierz * z (wybierz" Scott "z podwójnej grupy przez 1)'? – GolezTrol
Kolumny tożsamości są podobne do sekwencji i są w każdym razie odrębne. Jaki jest wymóg biznesowy dotyczący grupowania w kolumnach tożsamości? – vishad
Próbowałem już tej enkapsulacji wybierz, ale problem pozostaje. @vishad Chcę grupować w innych kolumnach, a nie w tożsamości, aby mieć pojedynczy wpis dla innych kolumn, a następnie przekazać ten wpis do nowej tabeli wraz z tożsamością. –