Saya mencari cara yang baik untuk melakukan insert multi-baris ke dalam database Oracle 9. Berikut ini berfungsi di MySQL tetapi tampaknya tidak didukung di 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');
sequnce.nextval
seperti yang dilarang diunion
dariselect
. Sebaliknya kita bisa ikutINSERT ALL
.Di Oracle, untuk menyisipkan banyak baris ke tabel t dengan kolom col1, col2 dan col3 Anda dapat menggunakan sintaks berikut:
sumber
SELECT 1 FROM DUAL
terjadi.INSERT ALL
membutuhkanSELECT
subquery. Untuk menyiasatinya,SELECT 1 FROM DUAL
digunakan untuk memberikan satu baris data dummy.Gunakan SQL * Loader. Dibutuhkan sedikit pengaturan, tetapi jika ini bukan salah satu, nilainya.
Buat tabel
Buat CSV
Buat File Kontrol Pemuat
Jalankan perintah SQL * Loader
Konfirmasikan penyisipan
SQL * Loader memiliki banyak opsi, dan dapat mengambil hampir semua file teks sebagai inputnya. Anda bahkan dapat memasukkan data dalam file kontrol Anda jika diinginkan.
Berikut ini adalah halaman dengan beberapa rincian lebih lanjut -> SQL * Loader
sumber
fruit_id "fruit_seq.nextval"
dalam definisi kolomSetiap kali saya perlu melakukan ini saya membangun blok PL / SQL sederhana dengan prosedur lokal seperti ini:
sumber
Jika Anda memiliki nilai yang ingin Anda sisipkan di tabel lain, maka Anda bisa menyisipkan dari pernyataan pilih.
Jika tidak, Anda bisa daftar sekelompok pernyataan menyisipkan baris tunggal dan mengirimkan beberapa permintaan secara massal untuk menghemat waktu untuk sesuatu yang berfungsi baik di Oracle dan MySQL.
Solusi @Espo juga bagus untuk Oracle dan MySQL jika data Anda belum ada dalam tabel.
sumber
Anda bisa memasukkan menggunakan loop jika Anda ingin memasukkan beberapa nilai acak.
sumber
Kursor juga dapat digunakan, meskipun tidak efisien. Posting stackoverflow berikut membahas penggunaan kursor:
Masukkan dan perbarui catatan menggunakan kursor di oracle
sumber
Berikut ini adalah panduan langkah demi langkah yang sangat berguna untuk memasukkan banyak baris di Oracle:
https://livesql.oracle.com/apex/livesql/file/content_BM1LJQ87M5CNIOKPOWPV6ZGR3.html
Langkah terakhir:
sumber
Dalam kasus saya, saya dapat menggunakan pernyataan penyisipan sederhana untuk menyisipkan banyak baris ke TABLE_A secara massal menggunakan hanya satu kolom dari TABLE_B dan mendapatkan data lain di tempat lain (urutan dan nilai hardcoded):
Hasil:
dll
sumber