insérer plusieurs lignes dans la base de données DB2

Je veux insérer plusieurs lignes dans une table DB2. J'ai une requête qui ressemble à ceci

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);

Cette requête ne fonctionne pas. Je ne sais pas s'il y a une façon plus syntaxiquement correcte de le faire dans DB2. Mais il serait utile d'insérer mes données de test.

29
demandé sur Frantumn 2012-07-31 19:11:03

3 réponses

Je suppose que vous utilisez DB2 pour z / OS, qui malheureusement (pour une raison quelconque, je n'ai jamais vraiment compris pourquoi) ne supporte pas l'utilisation d'une liste de valeurs où une sélection complète serait appropriée.

Vous pouvez utiliser une sélection comme ci-dessous. C'est un peu lourd, mais ça marche:

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

Votre déclaration fonctionnerait sur DB2 pour Linux / Unix / Windows (LUW), au moins quand je l'ai testé sur mon LUW 9.7.

25
répondu bhamby 2012-07-31 16:07:59

Mise à jour-version encore moins verbeuse

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')

Ce qui suit fonctionne également pour DB2 et est légèrement moins verbeux

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')
18
répondu Hogan 2015-12-31 18:24:31

Autre méthode

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
4
répondu Esperento57 2016-11-15 18:36:55