oracle insert and complex select. what's wrong?
i have some complex select and result need to place in the table. I try this:
INSERT INTO SAMGUPS_STATISTIC_STANTION
(SAMGUPS_STATISTIC_STANTION_SEQ.nextval)
(
with PRG as (
select
ID_OBJ
from PEREGON where ID_STAN1=&arrival
),
STN_OBJ as (
select
distinct ID_OBJ_P as ID_OBJ
from TMO start with ID_OBJ=&dispatch
connect by prior ID_OBJ_P=ID_OBJ
),
STAN as (
select
A_TOP.ID_POEZD
,A_TOP.vrsvop
from STN_OBJ inner join A_TOP on A_TOP.ID_OBJ=STN_OBJ.ID_OBJ and A_TOP.KODOP_P in ('01','07')
left join A_POEZD_ATR ATR on ATR.ID_POEZD=A_TOP.ID_POEZD and ATR.VRSVOP=A_TOP.VRSVOP
WHER开发者_StackOverflow社区E ATR.NOM_POEZD LIKE '____'
),
DATA_RESULT as
(
select
/*count(*) over() as TotalCount*/
to_char(&dispatch) as dispatch
,to_char(&arrival) as arrival
...
,ATR.PR_N_V_PZ
from PRG inner join A_TOP on A_TOP.ID_OBJ=PRG.ID_OBJ and A_TOP.KODOP_P in ('03','07')
left join A_POEZD_ATR ATR on ATR.ID_POEZD=A_TOP.ID_POEZD and ATR.VRSVOP=A_TOP.VRSVOP
inner join STAN STN on STN.ID_POEZD = ATR.ID_POEZD
WHERE ATR.NOM_POEZD LIKE '____'
order by A_TOP.ID_POEZD
)
SELECT * FROM DATA_RESULT);
i have error:
Error at Command Line:71 Column:25
Error report:
SQL Error: ORA-32034: unsupported use of WITH clause
32034. 00000 - "unsupported use of WITH clause"
*Cause: Inproper use of WITH clause because one of the following two reasons
1. nesting of WITH clause within WITH clause not supported yet
2. For a set query, WITH clause can't be specified for a branch.
3. WITH clause can't sepecified within parentheses.
*Action: correct query and retry
Whether there is to circumvent these restrictions? May be possible result of select place into variable and then using variable insert to table?
WITH clause can't sepecified within parentheses.
try rewrite smth like this
INSERT INTO SAMGUPS_STATISTIC_STANTION
with PRG as (
select
ID_OBJ
from PEREGON where ID_STAN1=&arrival
),
STN_OBJ as (
select
distinct ID_OBJ_P as ID_OBJ
from TMO start with ID_OBJ=&dispatch
connect by prior ID_OBJ_P=ID_OBJ
),
STAN as (
select
A_TOP.ID_POEZD
,A_TOP.vrsvop
from STN_OBJ inner join A_TOP on A_TOP.ID_OBJ=STN_OBJ.ID_OBJ and A_TOP.KODOP_P in ('01','07')
left join A_POEZD_ATR ATR on ATR.ID_POEZD=A_TOP.ID_POEZD and ATR.VRSVOP=A_TOP.VRSVOP
WHERE ATR.NOM_POEZD LIKE '____'
),
DATA_RESULT as
(
select
/*count(*) over() as TotalCount*/
to_char(&dispatch) as dispatch
,to_char(&arrival) as arrival
...
,ATR.PR_N_V_PZ
from PRG inner join A_TOP on A_TOP.ID_OBJ=PRG.ID_OBJ and A_TOP.KODOP_P in ('03','07')
left join A_POEZD_ATR ATR on ATR.ID_POEZD=A_TOP.ID_POEZD and ATR.VRSVOP=A_TOP.VRSVOP
inner join STAN STN on STN.ID_POEZD = ATR.ID_POEZD
WHERE ATR.NOM_POEZD LIKE '____'
order by A_TOP.ID_POEZD
)
SELECT SAMGUPS_STATISTIC_STANTION_SEQ.nextval, DATA_RESULT.* FROM DATA_RESULT;
No need for an ORDER BY on an INSERT.
An INSERT is coded like this:
INSERT INTO mytable (mycolumn, ...) SELECT ...
Try something like this:
INSERT INTO SAMGUPS_STATISTIC_STANTION
(dispatch, arrival, ..., PR_N_V_PZ)
select
to_char(&dispatch) as dispatch
,to_char(&arrival) as arrival
...
,ATR.PR_N_V_PZ
from (select
ID_OBJ
from PEREGON where ID_STAN1=&arrival
)
inner join A_TOP on A_TOP.ID_OBJ=PRG.ID_OBJ and A_TOP.KODOP_P in ('03','07')
left join A_POEZD_ATR ATR on ATR.ID_POEZD=A_TOP.ID_POEZD and ATR.VRSVOP=A_TOP.VRSVOP
inner join (select
A_TOP.ID_POEZD
,A_TOP.vrsvop
from (select
distinct ID_OBJ_P as ID_OBJ
from TMO start with ID_OBJ=&dispatch
connect by prior ID_OBJ_P=ID_OBJ
) inner join A_TOP on A_TOP.ID_OBJ=STN_OBJ.ID_OBJ and A_TOP.KODOP_P in ('01','07')
left join A_POEZD_ATR ATR on ATR.ID_POEZD=A_TOP.ID_POEZD and ATR.VRSVOP=A_TOP.VRSVOP
WHERE ATR.NOM_POEZD LIKE '____') STN
on STN.ID_POEZD = ATR.ID_POEZD
WHERE ATR.NOM_POEZD LIKE '____';
精彩评论