web-dev-qa-db-fra.com

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

Je souhaite 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 existe une manière plus syntaxiquement correcte de le faire dans DB2. Mais il serait utile d'insérer mes données de test.

30
Frantumn

Je suppose que vous utilisez DB2 pour z/OS, ce qui malheureusement (pour une raison quelconque, je n'ai jamais vraiment compris pourquoi) ne prend pas en charge 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 lorsque je l'ai testée sur mon LUW 9.7.

29
bhamby

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
Hogan

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
Esperento57