Mit Pl/Sql Dateinamen herausfiltern (Oracle)

Hallo zusammen,

kann mir jemand mal helfen, denn ich habe keine Idee, wie ich aus so einem Pfad den Dateinamen „systB“ herausfiltern soll, da sich die Länge des Pfades nicht bekannt ist. Daher kann ich den einfachen subtr in SqL nicht verwenden./oracle7/kurs/systB.dbf. Ich dachte da an eine Funktion in PL/SQL. Hab aber von PL/SQL keine Ahnung. Kann mir jemand helfen.

Gruss Tina

Hallo Tina!

Es gibt in PL/SQL die Funktion INSTR(string,substring,position,occurrence). Diese sucht in string nach substring. position und occurrence legen fest, wo und das wievielte Vorkommen gesucht werden soll. Wenn position negativ ist, dann wird vom Ende von string beginnend gesucht.
In deinem Fall also:

myPos := INSTR('/oracle7/kurs/systB.dbf','/',-1,1);
myFileName := SUBSTR('/oracle7/kurs/systB.dbf',myPos);

Damit hast du dann in myFileName ‚systB.dbf‘ stehen. Die Endung kannst du dann noch mit der gleichen Methode abschneiden (es ginge natürlich auch einfacher, wenn du sicher bist, dass die Endung immer ‚.dbf‘ ist, aber allgemeiner wäre eben alles nach (und inklusive) dem letzten ‚.‘ abzuschneiden. In diesem Zusammenhang solltest du auch berücksichtigen, ob der Dateiname zwangsläufig einen Pfad enthält, und ob dieser ‚/‘ als Trennzeichen verwendet (unter Windows wäre das dann ja z.B. ‚‘, am Mac ‚:‘).

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi Martin
, habs jetzt so gelöst:

create or replace function getfilename(in_filename_mit_pfad IN VARCHAR2)
return varchar2 is
pos_letzter_slash binary_integer;
filename_ohne_pfad varchar2(32);
begin

pos_letzter_slash:=instr(in_filename_mit_pfad,’’, -1);
filename_ohne_pfad:=substr(in_filename_mit_pfad,pos_letzter_slash+1);
return filename_ohne_pfad;
end;
/

select getfilename(member) from v$logfile;

und funktioniert gut. Bekomme den Dateinamen ohne Pfad und kann die Funnktion auf mehrer Views anwenden.

Aber trotzdem danke für eure Hilfe.

Gruss Tina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]