Salut,
Excusé l'intitulé de la discussion j'ai pas trouvé un plus proche du sujet.
Mon problème est peut etre de catégorie SQL, mais je poste en FORMS car la solution que je cherche est au niveau d’un item image basé sur un LONG RAW.
Je m’explique :
J’ai trois table : DEPT, EMP et PHOTO
DEPT( DEPTNO NUMBER(2), DNAME VARCHAR2(14), LOC VARCHAR2(13) )
EMP( EMPNO NOT NULL NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) )
PHOTO( ID NOT NULL NUMBER(7) , DESC VARCHAR2(30), TYPE VARCHAR2(30), BLOB NOT NULL LONG RAW, EMPNO NOT NULL NUMBER(4) )
DEPT( DEPTNO , DNAME , LOC )
EMP( EMPNO , ENAME , JOB , MGR , HIREDATE , SAL , COMM , DEPTNO )
PHOTO( ID , DESC , TYPE , BLOB , EMPNO )
Les tables contiennent respectivement : données du département, données de l’employé et photos des employés plus une photo spéciale (cliché vide identifié par ID = 0 et EMPNO = 0 qui contient le texte « Photo Non Disponible »). La table photo contient des images insérer par read_image_file().
J’ai crée une vue comme suit :
1 2 3 4
| CREATE OR REPLACE VIEW PH_VIEW_DEPT (V_EMPNO, V_DEPTNO, V_ID, V_BLOB) AS
SELECT EMP.EMPNO, EMP.DEPTNO, PHOTO.ID, PHOTO.BLOB
FROM PHOTO,EMP
WHERE ( EMP.EMPNO = PHOTO.EMPNO(+) ) WITH READ ONLY |
PH_VIEW_DEPT (V_EMPNO, V_DEPTNO, V_ID, V_BLOB )
NB:
“EMP.EMPNO = PHOTO.EMPNO(+)” pour ramené aussi les agents qui n’ont pas de photo (je crois jointure externe)
Au niveau forms :
J’ai crée deux blocs : BLOCK_DEPT (Maitre) basé sur la table DEPT, et un autre BLOCK_VIEW (Detaille) basé sur la vue PH_VIEW_DEPT.
BLOCK_DEPT affiche 1 seul enregistrement, BLOCK_VIEW affiche 5 enregistrements avec l’orientation et la barre de défilement en horizontale.
J’exécute mon module et j’interroge un enregistrement de BLOCK_DEPT: impeccable, il me rend le département et tous ses employés éventuellement avec photo pour chacun (si il trouve une photo correspondante) sinon l’item :BLOCK_VIEW.V_BLOB de celui qui n’a pas de photo reste vide.
Mon problème est comment je peux faire pour ramené le cliché spécial portant ID = 0 et EMPNO = 0 pour le visualisé en cas l’employé n’as pas encore de photo a la place d’avoir l’item image vide.
J’ai pensé à un DECODE dans code de la vue du genre :
1 2 3 4 5
| CREATE OR REPLACE VIEW PH_VIEW_DEPT (V_EMPNO, V_DEPTNO, V_ID, V_BLOB) AS
SELECT EMP.EMPNO, EMP.DEPTNO, PHOTO.ID,
decode(PHOTO.BLOB,NULL,'pas de photo', PHOTO.BLOB)
FROM PHOTO,EMP
WHERE ( EMP.EMPNO = PHOTO.EMPNO(+) ) WITH READ ONLY |
Mais je tombe sur ORA-00997: illegal use of LONG datatype.
Aussi au niveau de l'item image par déclencheur, mais je me suis coincé par le choix du déclencheur approprié et comment je verifié que l'item est vide ou null et est ce que BLOCK_VIEW en mode query va me permettre d'éditer par un :
select blob into :BLOCK_VIEW.V_BLOB from photo where id = 0 and empno = 0
Je doute de cela car en compilant, ce verbe select me renvoit "bad bind variable :BLOCK_VIEW.V_BLOB.
Auriez-vous programmé quelque chose de ce genre?
Peut être mon choix d'interrogation basé sur une vue est le problème et qu'il faut faire autrement, j'ai essayé par Maitre-Détail-Détail avec trois block sur les trois table mais même résultat avec un problème de navigation en plus.
Prière de ne pas me suggérer d'inserer les employés (n'ayant pas de photo) avec le cliché spécial, je veux avoir seulement les employés ayant une photo dans la table photo.
Merci pour votre aide.
Partager