Ich suche nach einer guten Möglichkeit, mehrzeilige Einfügungen in eine Oracle 9-Datenbank durchzuführen. Das Folgende funktioniert in MySQL, scheint jedoch in Oracle nicht unterstützt zu werden.
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
wie es in verboten istunion
vonselect
. Stattdessen können wir mit gehenINSERT ALL
.In Oracle können Sie die folgende Syntax verwenden, um mehrere Zeilen mit den Spalten col1, col2 und col3 in die Tabelle t einzufügen:
quelle
SELECT 1 FROM DUAL
.INSERT ALL
erfordert eineSELECT
Unterabfrage. Um dies zu umgehen,SELECT 1 FROM DUAL
wird eine einzelne Zeile mit Dummy-Daten angegeben.Verwenden Sie SQL * Loader. Es dauert ein wenig, aber wenn dies kein Einzelfall ist, lohnt es sich.
Tabelle erstellen
CSV erstellen
Loader-Steuerdatei erstellen
Führen Sie den SQL * Loader-Befehl aus
Einfügen bestätigen
SQL * Loader bietet viele Optionen und kann so ziemlich jede Textdatei als Eingabe verwenden. Sie können die Daten in Ihrer Steuerdatei sogar inline einfügen, wenn Sie möchten.
Hier ist eine Seite mit einigen weiteren Details -> SQL * Loader
quelle
fruit_id "fruit_seq.nextval"
in derWann immer ich dies tun muss, erstelle ich einen einfachen PL / SQL-Block mit einer lokalen Prozedur wie dieser:
quelle
Wenn Sie bereits die Werte haben, die Sie in eine andere Tabelle einfügen möchten, können Sie sie aus einer select-Anweisung einfügen.
Andernfalls können Sie eine Reihe von Anweisungen zum Einfügen einzelner Zeilen auflisten und mehrere Abfragen in großen Mengen senden, um Zeit für etwas zu sparen, das sowohl in Oracle als auch in MySQL funktioniert.
Die Lösung von @Espo ist auch eine gute Lösung, die sowohl in Oracle als auch in MySQL funktioniert, wenn Ihre Daten nicht bereits in einer Tabelle enthalten sind.
quelle
Sie können mit Schleife einfügen, wenn Sie zufällige Werte einfügen möchten.
quelle
Cursor können ebenfalls verwendet werden, obwohl sie ineffizient sind. Der folgende Stackoverflow-Beitrag beschreibt die Verwendung von Cursorn:
Fügen Sie einen Datensatz mit Cursorn in Oracle ein und aktualisieren Sie ihn
quelle
Hier ist eine sehr nützliche Schritt-für-Schritt-Anleitung zum Einfügen mehrerer Zeilen in Oracle:
https://livesql.oracle.com/apex/livesql/file/content_BM1LJQ87M5CNIOKPOWPV6ZGR3.html
Der letzte Schritt:
quelle
In meinem Fall konnte ich eine einfache Einfügeanweisung verwenden, um viele Zeilen mit nur einer Spalte aus TABLE_B in TABLE_A einzufügen und die anderen Daten an anderer Stelle abzurufen (Sequenz und fest codierter Wert):
Ergebnis:
usw
quelle