Ψάχνω για έναν καλό τρόπο να εκτελώ εισαγωγές πολλαπλών σειρών σε μια βάση δεδομένων Oracle 9. Το παρακάτω λειτουργεί στη MySQL, αλλά δεν φαίνεται να υποστηρίζεται στην 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');
Αυτό λειτουργεί στην 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
Αυτό που πρέπει να θυμάστε εδώ είναι να χρησιμοποιείτε τη δήλωση from dual
.
(πηγή)
Χρησιμοποιήστε το SQL*Loader. Χρειάζεται μια μικρή ρύθμιση, αλλά αν αυτό δεν είναι μια εφάπαξ, αξίζει τον κόπο.
Δημιουργία πίνακα
SQL> create table ldr_test (id number(10) primary key, description varchar2(20));
Table created.
SQL>
Δημιουργία CSV
oracle-2% cat ldr_test.csv
1,Apple
2,Orange
3,Pear
oracle-2%
Δημιουργία αρχείου ελέγχου φορτωτή
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**
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
Επιβεβαιώστε την εισαγωγή
SQL> select * from ldr_test;
ID DESCRIPTION
---------- --------------------
1 Apple
2 Orange
3 Pear
SQL>
Το SQL*Loader έχει πολλές επιλογές και μπορεί να δεχτεί σχεδόν οποιοδήποτε αρχείο κειμένου ως είσοδο. Μπορείτε ακόμη και να ενσωματώσετε τα δεδομένα στο αρχείο ελέγχου σας, αν θέλετε.
Εδώ είναι μια σελίδα με μερικές περισσότερες λεπτομέρειες -> SQL*Loader
Εάν έχετε ήδη τις τιμές που θέλετε να εισαγάγετε σε έναν άλλο πίνακα, τότε μπορείτε να κάνετε Εισαγωγή από μια δήλωση select.
INSERT INTO a_table (column_a, column_b) SELECT column_a, column_b FROM b_table;
Διαφορετικά, μπορείτε να απαριθμήσετε μια δέσμη δηλώσεων εισαγωγής μίας γραμμής και να υποβάλετε πολλά ερωτήματα μαζικά για να εξοικονομήσετε χρόνο για κάτι που λειτουργεί τόσο στην Oracle όσο και στη MySQL.
Η λύση @Espo'είναι επίσης μια καλή λύση που θα λειτουργήσει τόσο στην Oracle όσο και στη MySQL, αν τα δεδομένα σας δεν είναι ήδη σε πίνακα.