Supprimer le fichier à partir du serveur à l'aide de UTL_FILE.FRemove sans connaître le nom de fichier
Je suis un reporting analyst, qui a été demandé d'apprendre un peu PL/SQL pour automatiser certains processus. Donc, je suis presque fini, avec un pas debout dans la voie. J'ai un forfait qui
- Des charges d'une table avec une requête que j'ai écrit.
- Exporte les résultats de cette table .fichier txt sur le serveur avec la current_date cloué sur le nom de fichier .
Je suis en train de supprimer les 3 fichiers qu'il crée à l'aide d'un générique, mais je ne cesse de rencontrer des erreurs telles que "vendor_file.ia.*.txt n'est pas défini":
- file_location est mon chemin
Je peux le supprimer sans problème avec:
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');
Mais évidemment cela ne sera pas le supprimer lorsqu'il est exécuté le mois prochain. Alors suis-je raté un simple générique à la recherche juste pour " vendor_file.ia.*' Et la syntaxe de regarder dans Oracle?
Si je n'ai pas fourni suffisamment d'informations s'il vous plaît laissez-moi savoir!
Merci beaucoup!
- Vous devez connaître le nom exact du fichier, afin de l'appeler
fremove
. Vous ne pouvez pas passer une wild card. Si vous n'avez pas l'esprit de certains hackery (en particulier en s'appuyant surx$
tables), vous pouvez utiliserdbms_backup_restore
pour afficher la liste des fichiers dans un répertoire davidalejomarcos.wordpress.com/2011/09/13/... Ou vous pouvez utiliser un Java procédure stockée asktom.oracle.com/pls/apex/... - Ma solution serait de créer une table avec deux champs 1) de nom de fichier, 2) deleted_flag. Écrire le nom de fichier de ce tableau lorsqu'il est créé, puis lorsque vous êtes prêt à supprimer le fichier de regarder pour tous les noms de fichiers qui ne sont pas marqués comme supprimés et les supprimer et marquer le record supprimée de la table.
- ou juste un tableau avec le nom du fichier à elle. Supprimer la ligne dans la table lorsque le fichier est supprimé.
- qui serait à l'œuvre, je pourrais pencher vers un contrôle, afin que je puisse voir quels fichiers ont été créés / supprimés, pour le débogage / traçage.
- Merci beaucoup pour votre aide les gars! Je vais essayer de vous faire le tableau avec le nom. Le hackery peut-être hors de mes compétences.
Vous devez vous connecter pour publier un commentaire.
Vieux post, mais...
Vous pouvez faire une table externe de la liste d'un répertoire contenu du fichier.
Vous pouvez ensuite écrire une boucle pour récupérer vos fichiers les noms de la table externe et exécuter utl_file.fremove
Vous pouvez utiliser le préprocesseur pour exécuter un script shell pour supprimer les fichiers.
Oracle docs sur préprocesseur
Ceci peut être utilisé pour supprimer plusieurs fichiers à partir de l'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;
/