Sql 子查询后插入问题-Oracle

Sql 子查询后插入问题-Oracle,sql,oracle,subquery,common-table-expression,Sql,Oracle,Subquery,Common Table Expression,我有一个子查询列表,如下所示 WITH QRY1 AS (.. SOME PL SQL STATEMNT), QRY2 (.. SELECT X,Y,Z,QRY1.* ), QRY3 (.. SOME SELECT * AGAIN USING QRY2) 最后 SELECT * FROM QRY3; 有什么办法我可以做吗 INSERT INTO table_name (a,b,c,d) SELECT * FROM QRY3; 您只需将CTE作为select的一部分放在插入本身之后

我有一个子查询列表,如下所示

WITH QRY1 AS (.. SOME PL SQL STATEMNT),
QRY2 (.. SELECT X,Y,Z,QRY1.* ),
QRY3 (.. SOME SELECT * AGAIN USING QRY2)
最后

SELECT * FROM QRY3;
有什么办法我可以做吗

INSERT INTO table_name (a,b,c,d)
     SELECT * FROM QRY3;

您只需将CTE作为select的一部分放在插入本身之后,而不是之前:

INSERT INTO table_name (a,b,c,d)
WITH QRY1 AS (.. SOME PL SQL STATEMNT),
QRY2 (.. SELECT X,Y,Z,QRY1.* ),
QRY3 (.. SOME SELECT * AGAIN USING QRY2)
 -- and finally 
SELECT * FROM QRY3;
快速演示:

create table table_name (a number, b number, c number, d number);

insert into table_name (a,b,c,d)
with qry1 as (select 4 as d from dual),
qry2 as (select 2 as b, 3 as c, qry1.* from qry1),
qry3 as (select 1 as a, qry2.* from qry2)
select * from qry3;

1 row inserted.

select * from table_name;

         A          B          C          D
---------- ---------- ---------- ----------
         1          2          3          4