合并插入语句

问题描述 投票:1回答:3

我如何将多个insert语句放在一起?我要插入8种不同的描述。例如:

insert into table (
    p_number, description, period
)
select  p.p_number, g.description, g.period, 
from    other_table p
        ,('desc1' as description
                ,2015 + Level as period
        from dual connect by 2015 + Level <=2050) g
where   p.flag = 'Y';


insert into table (
    p_number, description, period
)
select  p.p_number, g.description, g.period, 
from    other_table p
        ,('desc2' as description
                ,2015 + Level as period
        from dual connect by 2015 + Level <=2050) g
where   p.flag = 'Y';
sql oracle
3个回答
1
投票

您可以使用CTE生成描述和句点,并将它们交叉连接到真实源表:

insert into target_table (
    p_number, description, period
)
with descriptions (description) as (
            select 'desc1' from dual
  union all select 'desc2' from dual
  -- etc.
),
periods (period) as (
  select 2015 + level
  from dual
  connect by level <= 35
)
select s.p_number, d.description, p.period, 
from source_table s
cross join descriptions d
cross join periods p
where s.flag = 'Y';

未经测试,当然......


2
投票

你可以使用union all

insert into table (
    p_number, description, period
)
select  p.p_number, g.description, g.period, 
from    other_table p
        ,('desc1' as description
                ,2015 + Level as period
        from dual connect by 2015 + Level <=2050) g
where   p.flag = 'Y'
union all
select  p.p_number, g.description, g.period, 
from    other_table p
        ,('desc2' as description
                ,2015 + Level as period
        from dual connect by 2015 + Level <=2050) g
where   p.flag = 'Y';

-1
投票

使用交叉连接(和联合):

insert into table (
    p_number, description, period
)
select  p.p_number, d.description, g.period
from    other_table p cross join (
    select 'desc1' description from dual  union 
    select 'desc2' from dual  union 
    ...
    select 'desc1' from dual 
) d cross join ( 
    select 2015 + Level as period
        from dual connect by 2015 + Level <=2050
) g
© www.soinside.com 2019 - 2024. All rights reserved.