2016-07-26 6 views
0

Ich arbeite an einem Paket, das Dateinamen aus einem Verzeichnis als in_file_name Parameter übergibt, aber das aufrufende Programm übergibt auch die Unterverzeichnisnamen und es sollte nicht. Im Moment bin ich Abbruchs das Paket, wenn die in_file_name ist ein Unterverzeichnis, indem Sie die folgenden Schritte aus:Oracle PL/SQL - überprüfen, ob Eingabeparameter ein Verzeichnis ist

IF in_file_name IN ('sub_dir_1','sub_dir_2','sub_dir_3') 
    THEN 
     RETURN; 
    END IF; 

Allerdings kann ich Probleme in der Zukunft forsee, ob neue Verzeichnisse erstellt werden. Gibt es einen Weg zu überprüfen, ob der in_file_name ein Verzeichnis ist, anstatt die Namen hart zu codieren?

Eine Möglichkeit, die ich mir vorstellen kann, ist UTIL_OS.run_cmd('echo */') ausführen, um eine Liste von Verzeichnissen zu erhalten. Aber ich bin nicht sicher, wie man die Ausgabe erhält und es in dieser IF Aussage verwendet.

Danke!

+0

Sind die Dateien/Verzeichnisse, die Sie unter einem OS-Verzeichnis sind überprüft, die als Oracle-Directory-Objekt existiert? –

+0

@AlexPoole ja. – user3224907

Antwort

2

Angenommen, Sie arbeiten mit einem Verzeichnisobjekt und der übergebene Dateiname ist eine Datei (oder ein Verzeichnis) darunter, können Sie die utl_file.fgetattr() procedure verwenden, um es zu testen; Wenn der übergebene Name eine Datei ist, wird das Flag fexists wahr sein, und wenn es nicht existiert oder ein Verzeichnis und keine einfache Datei ist, wird es falsch sein. (Das scheint nicht dokumentiert zu sein, aber es funktioniert zumindest unter Linux).

So müssen Sie einige zusätzliche Variablen deklarieren, konnten aber dann tun:

utl_file.fgetattr(
    location => your_directory, 
    filename => in_file_name, 
    fexists => l_fexists, 
    file_length => l_file_length, 
    block_size => l_block_size); 

if not l_fexists then 
    -- handle file not existing OR being a directory 
end if; 
+0

Als ich es zu kompilieren versuchte, verursachte 'IF! L_fexists' ein' PLS-00103: Das Symbol "!" ' – user3224907

+0

@ user3224907 - Entschuldigung, sprachliche Verwirrung; geändert '!' in 'nicht' .... –