SQL只插入一个不同的数据插入多行

时间:2016-09-08 14:11:54

标签: sql oracle oracle11g

我想用单个插入插入多个行,但只有最后一个数据可以从列表中变化。 像这样。

INSERT INTO TB_TEMPLATE (
    ID_BENEFICIO,ID_PROGRAMA,DDD
)VALUES ('42','78', X)

但X中的值是一个像

这样的列表
11,15,17,19,24,43,54,65

可以使用一个插件吗?

所有数据均为String。

2 个答案:

答案 0 :(得分:0)

这样的东西会起作用,假设您正在对X值进行硬编码(假设值为NUMBER,那么在插入之前必须将它们转换为VARCHAR2 - 这是通过to_char()完成的)。根据需要进行调整。如果列表已作为表格中的列存在,请从表格中选择该列,而不是union all中的“dual”。

INSERT INTO TB_TEMPLATE (
    ID_BENEFICIO,ID_PROGRAMA,DDD
)
with 
     value_list ( x ) as (
       select 11 from dual union all
       select 15 from dual union all
       select 17 from dual union all
       select 19 from dual             -- etc.
     )
select '42', '78', to_char(x)
from   value_list
;

或者也许:

INSERT INTO TB_TEMPLATE (
    ID_BENEFICIO,ID_PROGRAMA,DDD
)
with 
     value_list ( x ) as (
       select column_value
       from   table(sys.odcinumberlist(11,15,17,19,24,43,54,65))
     )
select '42', '78', to_char(x)
from   value_list
;

答案 1 :(得分:0)

试试这个

INSERT INTO TB_TEMPLATE (ID_BENEFICIO,ID_PROGRAMA,DDD)
SELECT '42','78',
       CASE LEVEL WHEN 1 THEN '11'
                  WHEN 2 THEN '15'
                  WHEN 3 THEN '17'
                  WHEN 4 THEN '19'
                  WHEN 5 THEN '24'
                  WHEN 6 THEN '43'
                  WHEN 7 THEN '54'
                  WHEN 8 THEN '65'
        END
FROM DUAL
Connect BY LEVEL <= 8;