Détails
Meilleur moyen d'insérer plusieurs rangs dans Oracle ?
Je suis à la recherche d'un bon moyen d'effectuer des insertions de plusieurs lignes dans une base de données Oracle 9. La méthode suivante fonctionne avec MySQL mais ne semble pas être prise en charge par Oracle.
INSERT INTO TMP_DIM_EXCH_RT
(EXCH_WH_KEY,
EXCH_NAT_KEY,
EXCH_DATE, EXCH_RATE,
FROM_CURCY_CD,
TO_CURCY_CD,
EXCH_EFF_DATE,
EXCH_EFF_END_DATE,
EXCH_LAST_UPDATED_DATE)
VALUES
(1, 1, '28-AUG-2008', 109.49, 'USD', 'JPY', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(2, 1, '28-AUG-2008', .54, 'USD', 'GBP', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(3, 1, '28-AUG-2008', 1.05, 'USD', 'CAD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(4, 1, '28-AUG-2008', .68, 'USD', 'EUR', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(5, 1, '28-AUG-2008', 1.16, 'USD', 'AUD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(6, 1, '28-AUG-2008', 7.81, 'USD', 'HKD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008');
242
3
Cela fonctionne dans Oracle :
La chose à retenir ici est d'utiliser l'instruction
from dual
.([source][1])
[1] : http://forums.devshed.com/oracle-development-96/how-can-i-do-multirow-insert-in-oracle-406709.html
Utilisez SQL*Loader. Cela demande un peu de configuration, mais si ce n’est pas un cas isolé, cela en vaut la peine.
Créer une table
Créer un CSV
Créer le fichier de contrôle du chargeur
*Exécuter la commande SQLLoader**.
Confirmer l'insertion
SQL*Loader a beaucoup d'options, et peut prendre à peu près n'importe quel fichier texte comme entrée. Vous pouvez même intégrer les données dans votre fichier de contrôle si vous le souhaitez.
Voici une page avec plus de détails -> [SQL*Loader][1]
[1] : http://www.orafaq.com/wiki/SQL%2ALoader_FAQ
Si vous avez déjà les valeurs que vous voulez insérer dans une autre table, vous pouvez insérer à partir d'une instruction de sélection.
Sinon, vous pouvez lister un ensemble d'instructions d'insertion à une seule ligne et soumettre plusieurs requêtes en vrac pour gagner du temps et obtenir quelque chose qui fonctionne à la fois dans Oracle et MySQL.
La solution de @Espo'est également une bonne solution qui fonctionnera à la fois dans Oracle et MySQL si vos données ne sont pas déjà dans une table.