2017-01-31 73 views
1

我一直的子查詢的東西子列表類似下面問題與子查詢後插入 - 甲骨文

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; 

回答

1

你只需要將CTE作爲選擇的一部分,在插入之後,而不是在它之前:

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