Lösche die Datei vom server mit UTL_FILE.FRemove, ohne zu wissen, den Namen der Datei
Ich bin ein reporting analyst, der gefragt wurde, zu lernen, einige PL/SQL zu automatisieren einige Prozesse. So ich bin fast fertig, mit einem Schritt im Weg stehen. Ich habe ein Paket, das
- Lädt eine Tabelle mit einer Abfrage die ich geschrieben habe.
- Exportiert die Ergebnisse aus der Tabelle zu einem .txt-Datei auf dem server mit der current_date geheftet auf den Namen der Datei .
Ich versuche zum löschen der 3 Dateien, die es schafft mit einer wildcard, aber ich ständig Fehlermeldungen wie "vendor_file.ia.*.txt ist nicht definiert":
- file_location ist mein Weg
Kann ich es löschen kein problem mit:
utl_file.fremove(file_location,'vendor_file.ia.09.02.2015.txt');
utl_file.fremove(file_location,'vendor_file.il.09.02.2015.txt');
utl_file.fremove(file_location,'vendor_file.sd.09.02.2015.txt');
Aber offensichtlich, dass nicht löschen es, wenn es ausgeführt wird nächsten Monat. So bin ich fehlt eine einfache wildcard-Suche nur für 'vendor_file.ia.*' Und hat die syntax Aussehen in Oracle?
Wenn ich nicht genügend Informationen, bitte lassen Sie mich wissen!
Vielen Dank!
- Sie müssten, um zu wissen, die genauen Datei-Namen, um den Anruf
fremove
. Sie können nicht passieren Sie eine wild card. Wenn Sie nichts dagegen haben einige Hack (vor allem unter Berufung aufx$
Tabellen), die Sie verwenden könnendbms_backup_restore
zum auflisten der Dateien in einem Verzeichnis davidalejomarcos.wordpress.com/2011/09/13/... Oder verwenden Sie eine gespeicherte Java-Prozedur asktom.oracle.com/pls/apex/... - Meine Lösung wäre, eine Tabelle erstellen mit zwei Feldern 1) Dateiname 2) deleted_flag. Schreiben der Datei-name in diese Tabelle, wenn es erstellt wird und dann, wenn Sie bereit sind, löschen Sie die Datei für jeden Dateinamen, die nicht als gelöscht markiert und löschen Sie Sie, und markieren Sie den Datensatz als gelöscht in der Tabelle.
- oder einfach nur eine Tabelle mit dem Dateinamen darin. Löschen Sie die Zeile in der Tabelle, wenn die Datei gelöscht wird.
- das würde funktionieren, ich würde lehnen in Richtung einer Prüfung, so dass ich sehen kann, welche Dateien angelegt / gelöscht werden, zum debugging / tracing.
- Vielen Dank für Eure Hilfe, fellas! Ich werde versuchen die Tabelle mit den Namen. Der Hack könnte aus meinen Fähigkeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alter post aber...
Können Sie eine externe Tabelle aus einer directory-Datei Inhalt.
Sie könnten dann schreiben Sie eine Schleife, um Ihre Dateien mit Namen aus der externen Tabelle, und führen utl_file.fremove
Können Sie mit der Präprozessor ausführen eines shell-Skript, um die Dateien zu löschen.
Oracle docs auf Präprozessor
Diese können verwendet werden, um klar mehrere Dateien von der Oracle-directory
begin
for i in (select filename from (select * from
table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DIR_NAME')) order by mtime) where filename like
'backup%')
loop
UTL_FILE.FREMOVE ('DIR_NAME', i.filename );
end loop;
end;
/