Καλύτερος τρόπος για να κάνετε εισαγωγή πολλαπλών σειρών στην Oracle;

Ψάχνω για έναν καλό τρόπο να εκτελώ εισαγωγές πολλαπλών σειρών σε μια βάση δεδομένων 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.

(πηγή)

Σχόλια (7)

Χρησιμοποιήστε το 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  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

Σχόλια (4)

Εάν έχετε ήδη τις τιμές που θέλετε να εισαγάγετε σε έναν άλλο πίνακα, τότε μπορείτε να κάνετε Εισαγωγή από μια δήλωση select.

INSERT INTO a_table (column_a, column_b) SELECT column_a, column_b FROM b_table;

Διαφορετικά, μπορείτε να απαριθμήσετε μια δέσμη δηλώσεων εισαγωγής μίας γραμμής και να υποβάλετε πολλά ερωτήματα μαζικά για να εξοικονομήσετε χρόνο για κάτι που λειτουργεί τόσο στην Oracle όσο και στη MySQL.

Η λύση @Espo'είναι επίσης μια καλή λύση που θα λειτουργήσει τόσο στην Oracle όσο και στη MySQL, αν τα δεδομένα σας δεν είναι ήδη σε πίνακα.

Σχόλια (0)