Ich bin auf der Suche nach einem guten Weg, um mehrzeilige Einfügungen in einer Oracle 9-Datenbank durchzuführen. Das Folgende funktioniert in MySQL, scheint aber 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');
Dies funktioniert in Oracle:
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
Das Wichtigste dabei ist, dass Sie die Anweisung "from dual" verwenden.
(Quelle)
Verwenden Sie SQL*Loader. Es erfordert ein wenig Einarbeitungszeit, aber wenn es sich nicht um eine einmalige Angelegenheit handelt, lohnt es sich.
Tabelle erstellen
SQL> create table ldr_test (id number(10) primary key, description varchar2(20));
Table created.
SQL>
CSV erstellen
oracle-2% cat ldr_test.csv
1,Apple
2,Orange
3,Pear
oracle-2%
Loader-Steuerungsdatei erstellen
oracle-2% cat ldr_test.ctl
load data
infile 'ldr_test.csv'
into table ldr_test
fields terminated by "," optionally enclosed by '"'
( id, description )
oracle-2%
*SQLLoader-Kommando ausführen**
oracle-2% sqlldr <username> control=ldr_test.ctl
Password:
SQL*Loader: Release 9.2.0.5.0 - Production on Wed Sep 3 12:26:46 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Commit point reached - logical record count 3
Einfügen bestätigen
SQL> select * from ldr_test;
ID DESCRIPTION
---------- --------------------
1 Apple
2 Orange
3 Pear
SQL>
SQL*Loader verfügt über eine Vielzahl von Optionen und kann so ziemlich jede Textdatei als Eingabe verwenden. Sie können die Daten sogar in Ihre Kontrolldatei einfügen, wenn Sie möchten.
Hier ist eine Seite mit einigen weiteren Details -> SQL*Loader
Wenn Sie die Werte, die Sie einfügen möchten, bereits in einer anderen Tabelle haben, können Sie aus einer Select-Anweisung einfügen.
INSERT INTO a_table (column_a, column_b) SELECT column_a, column_b FROM b_table;
Andernfalls können Sie eine Reihe von einzeiligen Einfügeanweisungen auflisten und mehrere Abfragen im Ganzen übermitteln, um Zeit für etwas zu sparen, das sowohl in Oracle als auch in MySQL funktioniert.
Die Lösung von @Espo's ist auch eine gute Lösung, die sowohl in Oracle als auch in MySQL funktioniert, wenn sich Ihre Daten nicht bereits in einer Tabelle befinden.