Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pisahkan File Teks/CSV Besar menjadi Beberapa File di PL SQL

Terkadang Anda memiliki file teks atau CSV yang sangat besar untuk diproses, tetapi pertama-tama Anda ingin membuat file yang lebih kecil dari file besar itu. Karena file besar itu mungkin membutuhkan terlalu banyak waktu untuk diproses atau dibuka. Jadi saya memberikan contoh di bawah ini untuk membagi file teks/CSV besar menjadi beberapa file dalam PL SQL menggunakan prosedur tersimpan.

Anda hanya perlu meneruskan dua parameter ke prosedur PL SQL ini, pertama adalah nama objek direktori database, tempat file teks berada dan yang kedua adalah nama file sumber (file yang ingin Anda pisahkan).

Jika objek direktori Oracle tidak ada untuk lokasi file teks, maka Anda dapat membuatnya seperti yang ditunjukkan di bawah ini:

For windows:
CREATE OR REPLACE DIRECTORY CSV_FILE_DIR AS 'D:\plsql\text_files';
For Linux/Unix (due to difference in path):
CREATE OR REPLACE DIRECTORY CSV_FILE_DIR AS '/plsql/text_files';

Ubah jalur di atas sesuai dengan lokasi file Anda. Kemudian buat prosedur di bawah ini dengan menjalankan skripnya:

CREATE OR REPLACE PROCEDURE split_file (p_db_dir IN VARCHAR2,
 p_file_name IN VARCHAR2)
IS
 read_file UTL_FILE.file_type;
 write_file UTL_FILE.file_type;
 v_string VARCHAR2 (32767);
 j NUMBER := 1;
BEGIN
 read_file := UTL_FILE.fopen (p_db_dir, p_file_name, 'r');

WHILE j > 0
 LOOP
 write_file := UTL_FILE.fopen (p_db_dir, j || '_' || p_file_name, 'w');

FOR i IN 1 .. 100
 LOOP -- example to dividing into 100 rows for each file.. you can increase the number as per your requirement
 UTL_FILE.get_line (read_file, v_string);
 UTL_FILE.put_line (write_file, v_string);
 END LOOP;

UTL_FILE.fclose (write_file);
 j := J + 1;
 END LOOP;
EXCEPTION
 WHEN OTHERS
 THEN
 -- this will handle if reading source file contents finish
 UTL_FILE.fclose (read_file);
 UTL_FILE.fclose (write_file);
END;

Prosedur ini membagi 100 baris untuk setiap file, yang dapat Anda modifikasi sesuai kebutuhan Anda. Sekarang jalankan prosedur ini seperti yang ditunjukkan di bawah ini dengan mengirimkan nama objek direktori database dan nama file:

BEGIN
 split_file ('CSV_FILE_DIR', 'text_file.csv');
END;

Anda dapat memeriksa lokasi file Anda (CSV_FILE_DIR) untuk beberapa file yang dimulai dengan angka seperti 1_text_file.csv, 2_text_file.csv dan seterusnya, seperti yang ditunjukkan pada gambar di bawah ini:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Arti dari byte dump(systimestamp) Oracle

  2. Fungsi HEXTORAW() di Oracle

  3. Bagaimana cara membuat urutan Oracle yang dimulai dengan nilai maksimal dari sebuah tabel?

  4. Apakah substr atau LIKE lebih cepat di Oracle?

  5. Adaptor Jaringan tidak dapat membuat koneksi saat terhubung dengan Oracle DB