Les Allergies
Alimentaires
Posez votre question Signaler

Charger un fichier pdf dans une base oracle?

than24 42Messages postés 27 septembre 2009Date d'inscription 11 août 2010Dernière intervention - Dernière réponse le 5 avril 2010 à 12:47
BONJOUR !!!
dans mon application java je veux rajouter la possibiliter d'imprimer des factures en forma pdf,je voulai savoir si c'est possible de remplire une table avec des fichiers de format pdf si c oui comment le faire et coment les extraire afin de les affichier dans une application java .
merci de me repondre
Lire la suite 

Charger un fichier pdf dans une base oracle »

24 réponses
Réponse
+0
moins plus
Salut
Tu peux utiliser les LOB....ou sinon stocker le chemin dans ta base et ton appli les chargent...
http://www.rcweb.fr/bd/lob.html
@+
chuka- 4 avril 2010 à 23:07
Pour l'insertion, tu adapte le lien suivant la table que tu as créées.
than24- 4 avril 2010 à 23:25
CREATE TABLE lire3 (
num_client varchar(10) INTEGER PRIMARY KEY,nom_client varchar(35),prenom varchar(35),
texte CLOB,
illustration BLOB,// je doit l'enlever? ILLUSTRATION C LE MEME avec celui de la procedure?
fichierJoint BFILE
);
CREATE DIRECTORY pImages AS 'c:\mesimages';// et ca je l'enleve aussi ?

-- insertion
INSERT INTO rapport VALUES (
1,
'texte du rapport jusqu''à 4 Go',
EMPTY_BLOB(),
BFILENAME('pImages','cours.pdf');//// je l'aisse qur cours.pdf
);////// bon je ne sais pas desolee j'abuse un peux mais je n'y connais rien
chuka- 5 avril 2010 à 00:24
CREATE TABLE lire3 (
num_client varchar(10) INTEGER PRIMARY KEY,nom_client varchar(35),prenom varchar(35),
texte varchar(255),
illustration BLOB// a garder
);

CREATE DIRECTORY pImages AS 'c:\mesimages';// oui

//*************************Pour l'insertion******************************//
CREATE OR REPLACE PROCEDURE load_file (
num_clients VARCHAR2,
nom_clients VARCHAR2,
prenoms VARCHAR2,
texts VARCHAR2,
nom_fichier varchar2) IS

src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
BEGIN
src_file := bfilename('pImages',nom_fichier );

-- insert a NULL record to lock
INSERT INTO rapport VALUES (
num_clients,nom_clients ,prenoms,texts,
EMPTY_BLOB()
);
RETURNING illustration INTO dst_file;

-- lock record
SELECT illustration
INTO dst_file
FROM lire3
WHERE num_client=num_clients
FOR UPDATE;

-- open the file
dbms_lob.fileopen(src_file, dbms_lob.file_readonly);

-- determine length
lgh_file := dbms_lob.getlength(src_file);

-- read the file
dbms_lob.loadfromfile(dst_file, src_file, lgh_file);

-- update the blob field
UPDATE lire3
SET illustration = dst_file
WHERE num_client=num_clients;

-- close file
dbms_lob.fileclose(src_file);
END load_file;
/
J'ai pas testé...y'a peut-etre quelques coquilles!!!;)
Ajouter un commentaire
Réponse
+0
moins plus
En effet, y'a de belles coquille!!

Pour lire:(mais ne l'affiche pas!! elle recupere juste la data!!!)
CREATE OR REPLACE PROCEDURE lire ( nom_fichier IN varchar2, nom_clients IN varchar2) AS
Img BLOB;
Amount INTEGER ;
Position INTEGER;
Buffer RAW (32767);

BEGIN
Amount:= 32767;
Position:=1;
SELECT illustration INTO Img FROM lire3 WHERE nom_client =nom_clients;
DBMS_LOB.OPEN(Img, DBMS_LOB.LOB_READONLY);
DBMS_LOB.READ(Img,Amount,Position,Buffer);
DBMS_LOB.CLOSE(Img);
END;
/
Pour insérer:
CREATE OR REPLACE PROCEDURE l_test (num_clients IN VARCHAR2,nom_clients IN VARCHAR2,prenoms IN VARCHAR2,texts IN VARCHAR2) AS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
begin
src_file := bfilename('PIMAGES',texts);
INSERT INTO lire3 (num_client,nom_client,prenom,texte,illustration) VALUES (
num_clients,nom_clients ,prenoms,texts,
EMPTY_BLOB()
) RETURNING illustration INTO dst_file;
SELECT illustration
INTO dst_file
FROM lire3
WHERE num_client=num_clients
FOR UPDATE;
dbms_lob.OPEN(src_file, dbms_lob.file_readonly);

-- determine length
lgh_file := dbms_lob.getlength(src_file);

-- read the file
dbms_lob.LOADFROMFILE(dst_file, src_file, lgh_file);

-- update the blob field
UPDATE lire3
SET illustration = dst_file
WHERE num_client=num_clients;
commit;
-- close file
DBMS_LOB.CLOSE(src_file);
end;
/
La Table (pour mon test
CREATE TABLE lire3 (
num_client varchar(10) PRIMARY KEY,
nom_client varchar(35),
prenom varchar(35),
texte varchar(255),
illustration BLOB
);
//Creation du directory où tu mets tes fichiers pdf avant que ceux-ci soit dans la table.
CREATE DIRECTORY pImages AS 'c:\mesimages';
//Il faut mettre les droits a ton schema qui se connectera et qui lancera la procedure (tu te connectes en sysdba et tu fais: GRANT READ,WRITE on directory pImages to Mon_USER;)
than24- 5 avril 2010 à 12:37
l'insertion c bien executèe mais il ne l'affiche pas car oracle ne le permet pas a parament , mais dites moi cette table ne va pas supporter un grand nombre de fichier pdf? ou n'importe quel nbr?
chuka- 5 avril 2010 à 12:43
ben c'est une table comme les autres....sinon, tu peux la partitionner si cela t'inquiète...mais là on rentre dans une administration qui devient lourde!!;)
Le seul vrai avantage de cela, c'est que si demain t'es fichiers sont supprimés du disque ou déplacés, tu n'as pas à mettre à jour la table (pour le chemin des fichiers) et les datas (même si tu as un crash serveur) seront toujours dispo grâce à tes backup!!
than24- 5 avril 2010 à 12:47
merci pour votre aide c tres gentil de votre part .
vous avez etè d'une tres grande aide merci encore.
bonne journee.
Ajouter un commentaire
Ce document intitulé « charger un fichier pdf dans une base oracle? » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?