Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:如何在具有标识列的表上插入带有GROUP BY子句的SELECT语句?_Sql_Database_Oracle - Fatal编程技术网

Oracle SQL:如何在具有标识列的表上插入带有GROUP BY子句的SELECT语句?

Oracle SQL:如何在具有标识列的表上插入带有GROUP BY子句的SELECT语句?,sql,database,oracle,Sql,Database,Oracle,在一个应用程序中,我打算截断和插入Oracle 12c数据库,但在标识列中发现了这个问题。即使插入。。。SELECT语句适用于我尝试过的大多数SELECT用法,当该语句还有GROUPBY子句时,它无法工作,发出ORA-00979:not GROUPBY expression投诉。下面是一些示例代码: create table aux ( owner_name varchar2(20), pet varchar2(20) ); insert into aux values ('Scott',

在一个应用程序中,我打算截断和插入Oracle 12c数据库,但在标识列中发现了这个问题。即使插入。。。SELECT语句适用于我尝试过的大多数SELECT用法,当该语句还有GROUPBY子句时,它无法工作,发出ORA-00979:not GROUPBY expression投诉。下面是一些示例代码:

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;
它在第一次插入时工作,但在下一次插入时失败

编辑:我修改了代码,这样问题更容易理解,同时仍然可以重现


谢谢你的帮助

在Oracle社区,这个问题已经得到了回答。

引用原始答案时,请记住,没有记录具体化提示。
谢谢大家的帮助

如果使用select*from select“Scott”from dual group by 1,是否有效?标识列类似于序列,并且无论如何都是不同的,在标识列上分组的业务要求是什么?我已经尝试过封装的select,但问题仍然存在@vishad我希望在其他列上分组,而不是在标识上分组,以便为其他列提供一个条目,然后将此条目与标识一起传递到新表。group BY 1的语法无效。使用GROUP BY名称。它们是相同的,只是为了表明问题不在GROUP BY代码中,而是在它与insert本身的交互中。同时运行这两个命令,您可以看到selectstatement有效,但insert无效。
insert into T1 (owner_name, pet_count)
with t as (select /*+ materialize */ owner_name, count(*) as pet_count from aux group by owner_name)
select owner_name, pet_count from t