PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PL/SQL] Funktion für "Stringbearbeitung"



markwaldhoff
24-02-2005, 14:41
Ich habe im Moment die Aufgabe aus einer Textdatei etwas auszulesen und dann in eine DB zu schreiben... das ganze hat auch schon funktioniert... jedoch haben wir die Textdatei mit substr ausgelesen... hier ein auszug:

---------------------------------------------------------------------


...
...
Procedure baf_get_line (p_inputfile in UTL_FILE.FILE_TYPE, p_eof in out boolean)
is

p_buffer varchar2(400);
begin

utl_file.get_line(p_inputfile,p_buffer);
baf_record.tknd_nr := substr(p_buffer,1,20);
baf_record.tc_nutzer_id := substr(p_buffer,22,7);
baf_record.tc_auftrags_nummer := substr(p_buffer,30,15);
baf_record.limit_angefragt := substr(p_buffer,46,26);
baf_record.name := substr(p_buffer,73,40);
baf_record.strasse := substr(p_buffer,114,55);
baf_record.postfach := substr(p_buffer,170,55);
baf_record.plz := substr(p_buffer,226,12);
...
...



---------------------------------------------------------------------

Dann hat sich jetzt jedoch herausgestellt das es sich nicht um eine feste Breite der Zeilen handelt, sondern das die einzelnen Daten die wir da auslesen durch ein ";" getrennt sind...

Jetzt müsste ich immer einen Wert so lange einlesen bis so ein ";" kommt... in PHP wäre das ja einfach mit der Funktion "explode" möglich... aber in PLSQL habe ich da noch nichts gefunden... aber vielleicht kann mir hier jemand weiterhelfen ?!?!?

Ach ja... so sieht eine solche Datei aus... ist immer nur eine zeile...

091918 ;1103354;000000005261113;0000000000000000000001100 0;SRG Sondershausen Test GmbH ;Schachtstraße 12 ; ;99703 ;Sondershausen ;D ;Peter Prost ;004343432606420 ; ;24.02.2005 12:40;742

Jasper
24-02-2005, 17:57
nit INSTR kann man das nächste vorkommen von ';' ermitteln und dann SUBSTR entsprechend parametrisieren.
aber ich würde das ganze elegant mit "external table" lösen. ist für solche sachen ideal. das parsen übernimmt sqlldr und ich kann ganz bequem per sql auf die daten des textfiles zugreifen.


-j

quinte17
24-02-2005, 18:14
wollt ihr des wirklich mit sql machen ;)
es gibt einen loader bei oracle... (ich gehe mal davon aus, dass wenn pl/sql im spiel ist oracle als db arbeitet)

sqlload glaub ich hieß die excutable..
du brauchst da ein config file, in dem die daten-file definiert ist und dann kannst du des ohne probs reinladen ^^

ist jetzt nicht 100%ig eine lösung, aber zumindest ein vorschlag nach dem man suchen kann..

greetz

Christoph
26-02-2005, 14:28
Wenn das eine reglmässig wiederkehrende Aufgabe ist, ist das mit dem SQL-Loader insofern problematisch, als Du die Fehlerbehandlung nicht gut steuern kannst (bestimmt sind die Daten, die Du bekommst gelegentlich fehlerhaft).

Deshalb würde ich es mit einem seperaten Script (z.B. in Perl) importieren. Das hat dann auch den Vorteil, dass es mit jeder anderen Datenbank auch klappt.