voila j'utilise la version 9.2.0.1.0 (9i) et forms builder 9.0.4.0.19(10g developper)
voila on a un projet qui consiste a concevoir et implémenter une base de données distribuées et multimédia, les données varchar2 et date et number …etc on arrive à les visualiser d’une façon transparente (en utilisant les database link) mais les données de type lobs on on arrive pas. Voici notre démarche on a deux bases de données (oral1 et oral2) sur deux sites différents, on a créer deux datalink entre ces deux bases link_2 dans la base 1 et link_1 dans la base 2 comme suite
base 1
create database link link_2
connect to sofian2 identified by sosso2
using ‘oral2’;
base 2
create database link link_1
connect to sofian1 identified by sosso
using ‘oral1’;
les liens quand a crée ont fonctionné normalement parce que les données à part les blobs sont accessibles.
Et dans la base1 (oral1) on a créer la table qui contiendra nos images après avoir créer les repertoires
A partir de l’utilisateur systeme
CREATE directory blobdir AS 'c:\temp\';
GRANT READ ON directory blobdir to sofian1;
On crée une table qui contiendra nos images
CREATE TABLE t_blob (id number, image blob);
et on a crée un synonyme de la table t_blob dans la base 2 (oral2) « photo »
Ensuite on crée notre package
CREATE OR REPLACE PACKAGE sql_blob IS
-- Procédure servant à ajouter un BLOB à notre table.
-- p_id correspond à l'id
-- p_name correspond au nom du fichier à inserer.
PROCEDURE add_blob(p_id NUMBER, p_name VARCHAR2);
END sql_blob;
/
CREATE OR REPLACE PACKAGE BODY sql_blob IS
PROCEDURE add_blob(p_id NUMBER, p_name VARCHAR2) IS
v_blob BLOB;
v_bfile BFILE;
BEGIN
-- On insére la ligne avec un blob vide dont on récupère le pointeur
INSERT INTO t_blob
VALUES
(p_id, empty_blob())
RETURNING image INTO v_blob;
-- On déclare un pointeur vers notre fichier
v_bfile := bfilename(directory => 'BLOBDIR', filename => p_name);
-- On ouvre ce fichier
dbms_lob.fileopen(v_bfile);
-- On rempli l'emplacement du BLOB vide dans la table avec le contenu de notre fichier
dbms_lob.loadfromfile(v_blob, v_bfile, dbms_lob.getlength(v_bfile));
-- On ferme le fichier
dbms_lob.fileclose(v_bfile);
END;
END sql_blob;
/
et çaa fonctionné très bien on a pu charger les images dans oral1 (base de données1)avec l’instruction suivant
exec sql_blob.add_blob(1,'photo_1.GIF');
et on arrive à les visualiser dans forms builder en se connectant dans la base où se trouve les images (oral1) mais si on se connecte dans oral2(base de données 2) on arrive pas à les visualiser et forms nous affiche les erreurs suivantes
FRM-40505 erreur oracle exéction impossible de l’interrogation
Cause : processing error encountered. The table associated with the current block of then form might not existe or your usenime might not have authority to perform the specified action on the table
et dans le menu par defaut (disply erreur) il affiche ORA-22992(impossible d'utiliser les indicateurs d'emplacementlob sélectionnées dans des tables distantes) donc comment visualiser les images à partir d'une autre base de données distante?
Sachant que le synonyme « photo » fonctionne très bien et les utilisateur on tous le rôle DBA .
Donc on est vraiment bloqué et une solution de votre part serai vraiment la bien venue. Merci à l’avance .
Partager