2016-04-15 25 views
0

Ich habe eine Textdatei mit mehreren Zeilen. Ich möchte einen Teilstring von der gleichen Position jeder Zeile mit PL/SQL auswählen. Wie kann ich das tun?PL/SQL extrahieren Spalten aus der Textdatei

Beispiel:

Dies ist meine Textdatei:

ABCDEFGHI 
JKLMNOPQR 

I Spalte wollen 2-4 in jeder Zeile mein Ergebnis mit PL/SQL extrahieren, so wie dies sein sollte:

BCD 
KLM 

Antwort

1

Sie haben eine Reihe von Optionen, um mit Dateien in Oracle zu arbeiten, je nachdem, was Ihre Ziele sind.

1. Option
Unter der Annahme, dass alles, was Sie tun wollen, ist die Datei und danach tun einige zusätzliche Verarbeitung

1) Lesen Sie die Datei mit UTL_FILE http://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS72681
2) Verwendung lesen die substring Funktion Extrakt Spalten 2-4
zB select substr('ABCDEFGHI',2,3) from dual;

2. Option
Wenn Sie direkt aus der Datei in eine Tabelle einfügen und alles, was Sie benötigen, ist die Formatierung Ich empfehle Ihnen, verwenden Sie SQL Loader
z.

load data infile 'data.csv' 
append into table mytable 
fields terminated by "," 
(
str "substr(:str,2,3)", 
) 


3. Option
Wenn Sie die Datei direkt in SQL zugreifen möchten und es -für Beispiel in einem view- verwenden, dann könnten Sie wahrscheinlich von Externe Tabellen profitieren
http://docs.oracle.com/database/121/SUTIL/GUID-ACF1D3AA-1D61-4682-AEC5-42C944756E12.htm#SUTIL1357

0

1) Zuerst müssen Sie ein Oracle Directory für Oracle-Benutzer erstellen, der eine Datei liest oder die Erlaubnis für bestehende gibt:

CREATE OR REPLACE DIRECTORY file_dir AS '/your/directory/'; 

Berechtigungen:

GRANT READ ON DIRECTORY file_dir TO YOU_USER; 

2) Kopieren Sie die Datei auf Ihrem/Ihrer/Verzeichnis/'Ordner

3) Run-Code, so etwas wie dieses:

Create or Replace PROCEDURE Readfile is 
    fileForRead UTL_FILE.FILE_TYPE; 
    line VARCHAR2(200); 
    BEGIN 
    f := UTL_FILE.FOPEN(file_dir ,'your_file.txt','R'); 
     IF UTL_FILE.IS_OPEN(fileForRead) THEN 
     LOOP 
      BEGIN 
      UTL_FILE.GET_LINE(fileForRead,line); 
      IF line IS NULL THEN 
       EXIT; 
      END IF; 
      line := substr(line, 2,3); 
     END LOOP; 
     COMMIT; 
     END IF; 
    END; 
/
Verwandte Themen