sql >> Database teknologi >  >> RDS >> Oracle

Opdel stor tekst/CSV-fil i flere filer i PL SQL

Nogle gange sker det, at du har en meget stor tekst- eller CSV-fil, der skal behandles, men først vil du lave mindre filer af den store fil. Fordi den store fil kan tage for lang tid at behandle eller åbne. Så jeg giver et eksempel nedenfor for at opdele store tekst-/CSV-filer i flere filer i PL SQL ved hjælp af lagret procedure.

Du skal blot overføre to parametre til denne PL SQL-procedure, den første er databasebibliotekets objektnavn, hvor tekstfilerne findes, og den anden er kildefilnavnet (den fil, du vil opdele).

Hvis Oracle biblioteksobjekt ikke findes for placeringen af ​​tekstfiler, kan du oprette det som vist nedenfor:

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

Skift stien ovenfor i henhold til dine filers placering. Opret derefter nedenstående procedure ved at udføre dets script:

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;

Denne procedure opdeler 100 rækker for hver fil, som du kan ændre efter dit behov. Udfør nu denne procedure som vist nedenfor ved at sende databasekatalogobjektnavnet og filnavnet:

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

Du kan kontrollere din filplacering (CSV_FILE_DIR) for flere filer, der starter med tal som 1_text_file.csv, 2_text_file.csv og så videre, som vist på billedet nedenfor:

  1. Håndtering af samtidige opdateringer i dvale

  2. Fuld liste over tegnsæt understøttet af MariaDB

  3. Vigtigheden af ​​transaktionslog i SQL Server

  4. Er der en indlejringsgrænse for korrelerede underforespørgsler i nogle versioner af Oracle?