sql >> Databasteknik >  >> RDS >> Oracle

Dela upp stor text/CSV-fil i flera filer i PL SQL

Ibland händer det att du har en mycket stor text- eller CSV-fil att bearbeta, men först vill du göra mindre filer av den stora filen. Eftersom den stora filen kan ta för lång tid att bearbeta eller öppna. Så jag ger ett exempel nedan för att dela upp stor text/CSV-fil i flera filer i PL SQL med hjälp av lagrad procedur.

Du behöver bara skicka två parametrar till denna PL SQL-procedur, den första är databaskatalogobjektets namn, där textfilerna finns och den andra är källfilens namn (filen som du vill dela).

Om Oracle katalogobjekt inte finns för platsen för textfiler kan du skapa det enligt nedan:

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';

Ändra sökvägen ovan enligt din fils plats. Skapa sedan proceduren nedan genom att köra dess skript:

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;

Denna procedur delar upp 100 rader för varje fil, som du kan ändra efter dina behov. Utför nu denna procedur som visas nedan genom att skicka databaskatalogobjektets namn och filnamnet:

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

Du kan kontrollera din filplats (CSV_FILE_DIR) för flera filer som börjar med siffror som 1_text_file.csv, 2_text_file.csv och så vidare, som visas i bilden nedan:

  1. Flera databasanslutning i Rails

  2. Infoga CLOB i Oracle-databasen

  3. beräkna löpande saldo i Oracle-fråga

  4. En databasmodell för en onlineundersökning. Del 2