chuka
818Messages postés
11 octobre 2008Date d'inscription
29 juillet 2010Dernière intervention
5 avril 2010 à 11:33
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;)
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
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!!!;)