Meer
Beste manier om multi-row insert te doen in Oracle?
Ik'ben op zoek naar een goede manier om multi-rij inserts uit te voeren in een Oracle 9 database. Het volgende werkt in MySQL maar lijkt niet te worden ondersteund in 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
Dit werkt in Oracle:
Wat je hier moet onthouden is dat je het
from dual
statement moet gebruiken.(bron)
Gebruik SQL*Loader. Het vergt wat instellingen, maar als dit niet eenmalig is, is het de moeite waard.
Create Table
Create CSV
Create Loader Control File
*Uitvoeren SQLLoader commando**
Bevestig invoegen
SQL*Loader heeft veel opties, en kan vrijwel elk tekstbestand als invoer gebruiken. Je kunt zelfs de data inline in je control file zetten als je dat wilt.
Hier is een pagina met wat meer details -> SQL*Loader
Als u de waarden die u wilt invoegen al in een andere tabel hebt, dan kunt u invoegen vanuit een select statement.
Anders kun je een heleboel single row insert statements opnoemen en verschillende queries in bulk indienen om tijd te besparen voor iets dat zowel in Oracle als in MySQL werkt.
@Espo's oplossing is ook een goede die zowel in Oracle als in MySQL zal werken als je gegevens niet al in een tabel staan.