Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/07/2008, 11h58   #1
PBR
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 9
Points : 9
Par défaut Supprimer le fichier physique d'un champ BFILE ?

Bonjour à tous,

J'aimerais savoir s'il est possible de supprimer le fichier physique lié à un champ de type BFILE automatiquement, lorsqu'on fait un DELETE dans la table ?
(Pour le moment j'arrive bien à supprimer l'enregistrement dans la table, mais le fichier correspondant reste dans mon répertoire physique...).

Y a-t-il une "option" prédéfinie qui existe ?
Faut-il mettre en place une procédure/trigger/autre... et si oui comment ?

Merci d'avance pour votre aide.

PBR
PBR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 12h03   #2
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Les BFILEs permettent uniquement d'accéder à des fichiers en lecture seule.

Il est impossible de modifier ou supprimer des fichiers pointés par des BFILEs...
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 12h11   #3
PBR
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 9
Points : 9
Merci pour votre réponse.

De ce fait, pensez-vous qu'il soit possible de mettre en place un "bidouillage" via un trigger / et ou procédure pour palier le problème ?

J'ai vu par exemple qu'il y avait une fonction permettant de récupérer le nom du fichier lié au BFILE. Je me dis qu'il est peut-être possible dans ce cas de mettre en place une sorte de trigger sur un DELETE de ma table, qui récupererait automatiquement le nom du fichier physique et le supprimerait via une autre commande... ?

Je suis débutant dans ce domaine... merci pour votre aide

PBR
PBR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 12h15   #4
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
si le serveur est >= 9.2, tu peux utiliser UTL_FILE.FREMOVE()
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 15h06   #5
PBR
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 9
Points : 9
Merci pour le tuyau !

Du coup j'ai mis en place un trigger... je ne sais pas si la solution est super, mais comme apparemment ça fonctionne je met le bout de code ici, des fois que ça interesse un débutant comme moi



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
CREATE OR REPLACE TRIGGER "Mon_Shema"."Mon_Trigger"
	BEFORE DELETE
	ON "Mon_Shema"."Ma_Table"
	FOR EACH ROW
DECLARE
	fileDir VARCHAR2(100);
	fileName VARCHAR2(100);
BEGIN
	IF ( DBMS_LOB.FILEEXISTS(:OLD.Mon_Champ_BFILE) = 1 ) THEN
  	  DBMS_LOB.FILEGETNAME(:OLD.Mon_Champ_BFILE, fileDir, fileName);
	  UTL_FILE.FREMOVE(fileDir,fileName);
	END IF;
End;
/

a++
PBR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h12.


 
 
 
 
Partenaires

Hébergement Web