在DB2数据库中插入多行

时间:2012-07-31 15:11:03

标签: sql db2

我想在DB2表中插入多行。 我有一个看起来像这样的查询

insert into tableName 
(col1, col2, col3, col4, col5) 
values 
(val1, val2, val3, val4, val5),
(val1, val2, val3, val4, val5),
(val1, val2, val3, val4, val5),
(val1, val2, val3, val4, val5);

此查询不起作用。我不知道在DB2中是否有更多语法正确的方法来执行此操作。但是插入我的测试数据会很有用。

5 个答案:

答案 0 :(得分:28)

我假设您正在使用DB2 for z / OS,不幸的是(无论出于何种原因,我从未真正理解为什么)不支持使用值 - 列表,其中完全选择是合适的。

您可以使用下面的选择。它有点笨拙,但它有效:

INSERT INTO tableName (col1, col2, col3, col4, col5) 
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1

您的声明适用于DB2 for Linux / Unix / Windows(LUW),至少在我的LUW 9.7上进行测试时。

答案 1 :(得分:18)

更新 - 更少罗嗦的版本

INSERT INTO tableName (col1, col2, col3, col4, col5) 
VALUES ('val1', 'val2', 'val3', 'val4', 'val5'),
       ('val1', 'val2', 'val3', 'val4', 'val5'),
       ('val1', 'val2', 'val3', 'val4', 'val5'),
       ('val1', 'val2', 'val3', 'val4', 'val5')

以下内容也适用于DB2,并且略显冗长

INSERT INTO tableName (col1, col2, col3, col4, col5) 
VALUES ('val1', 'val2', 'val3', 'val4', 'val5') UNION ALL
VALUES ('val1', 'val2', 'val3', 'val4', 'val5') UNION ALL
VALUES ('val1', 'val2', 'val3', 'val4', 'val5') UNION ALL
VALUES ('val1', 'val2', 'val3', 'val4', 'val5')

答案 2 :(得分:4)

其他方法

INSERT INTO tableName (col1, col2, col3, col4, col5)
select * from table(                        
                    values                                      
                    (val1, val2, val3, val4, val5),   
                    (val1, val2, val3, val4, val5),   
                    (val1, val2, val3, val4, val5),   
                    (val1, val2, val3, val4, val5)    
                    ) tmp

答案 3 :(得分:0)

我不同意霍根发表的评论。 这些说明适用于IBM DB2 Mini,但不是DB2 Z / OS。

这里是一个例子:

Exception data: org.apache.ibatis.exceptions.PersistenceException:
The error occurred while setting parameters

SQL: INSERT INTO TABLENAME(ID_, F1_, F2_, F3_, F4_, F5_) VALUES
 (?,          1,          ?,          ?,          ?,          ?),          
 (?,          1,          ?,          ?,          ?,          ?)


Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
ILLEGAL SYMBOL ",". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: FOR <END-OF-STATEMENT> NOT ATOMIC. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.25.17

因此,我可以确认用逗号分隔的大容量插入行不能在DB2 Z / OS上正常工作(也许您可以提供一些道具使其正常工作...)

答案 4 :(得分:0)

以上都不是我的工作,唯一的工作是

insert into tableName  
select 11, 'BALOO' from sysibm.sysdummy1 union all
select 22, nullif('','') AS nullColumn from sysibm.sysdummy1

使用nullif是因为否则无法在select语句中传递null。