Je recherche un bon moyen d'effectuer des insertions sur plusieurs lignes dans une base de données Oracle 9. Les éléments suivants fonctionnent dans MySQL mais ne semblent pas être pris en charge dans 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');
sequnce.nextval
car il est interdit dansunion
deselect
. Au lieu de cela, nous pouvons aller avecINSERT ALL
.Dans Oracle, pour insérer plusieurs lignes dans le tableau t avec les colonnes col1, col2 et col3, vous pouvez utiliser la syntaxe suivante:
la source
SELECT 1 FROM DUAL
ça fait.INSERT ALL
nécessite uneSELECT
sous - requête. Pour contourner cela,SELECT 1 FROM DUAL
est utilisé pour donner une seule ligne de données fictives.Utilisez SQL * Loader. Cela prend un peu de mise en place, mais si ce n'est pas un coup, ça vaut le coup.
Créer une table
Créer un CSV
Créer un fichier de contrôle du chargeur
Exécuter la commande SQL * Loader
Confirmer l'insertion
SQL * Loader a beaucoup d'options et peut prendre à peu près n'importe quel fichier texte en entrée. Vous pouvez même incorporer les données de votre fichier de contrôle si vous le souhaitez.
Voici une page avec plus de détails -> SQL * Loader
la source
fruit_id "fruit_seq.nextval"
dans la définition de colonneChaque fois que je dois le faire, je crée un simple bloc PL / SQL avec une procédure locale comme celle-ci:
la source
Si vous avez déjà les valeurs que vous souhaitez insérer dans une autre table, vous pouvez insérer à partir d'une instruction select.
Sinon, vous pouvez répertorier un tas d'instructions d'insertion sur une seule ligne et soumettre plusieurs requêtes en bloc pour gagner du temps pour 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.
la source
vous pouvez insérer en utilisant une boucle si vous souhaitez insérer des valeurs aléatoires.
la source
Des curseurs peuvent également être utilisés, bien qu'ils soient inefficaces. Le post stackoverflow suivant traite de l'utilisation des curseurs:
INSÉRER et METTRE À JOUR un enregistrement à l'aide de curseurs dans Oracle
la source
Voici un guide étape par étape très utile pour insérer plusieurs lignes dans Oracle:
https://livesql.oracle.com/apex/livesql/file/content_BM1LJQ87M5CNIOKPOWPV6ZGR3.html
La dernière étape:
la source
Dans mon cas, j'ai pu utiliser une simple instruction d'insertion pour insérer en vrac de nombreuses lignes dans TABLE_A en utilisant une seule colonne de TABLE_B et en obtenant les autres données ailleurs (séquence et une valeur codée en dur):
Résultat:
etc
la source