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 11/07/2008, 13h50   #1
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Par défaut Vue ramenant ligne particulière

Salut,
je suis sur Oracle Release 9.0.1.0.1

Je désire crée une vue sur les tables :

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) )

EMP( EMPNO , ENAME , JOB , MGR , HIREDATE , SAL , COMM , DEPTNO )
PHOTO( ID , DESC , TYPE , BLOB , EMPNO )

Les tables contiennent respectivement :
- données de l’employé
- photos des employés, plus une photo spéciale (cliché vide identifié par PHOTO.ID = 0 et PHOTO.EMPNO = 0 qui contient le texte « Photo Non Disponible »).

J’ai crée une vue comme suit :
Code :
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 employé qui n’ont pas de photo (je crois jointure externe)

C'est fonctionnel et elle me ramène les photos des agents (ceux qui ont des photos) pour les autres qui n'ont pas, les champs PHOTO.ID et PHOTO.BLOB sont nulle, je désire modifié le verbe select de ma vue a fin de ramené pour les employés n'ayant pas de photos le cliché vide "PHOTO.id=0".

Je trouve pas comment procéder, s'il vous plait aidez-moi.
Merci.
PS: j'ai simplifié le problème avec les tables demos d'oracle, pour ensuite l'adapter pour mes tables.
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 13h56   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
tu veux quoi ? Avoir photo.id égale à 0 à la place de NULL quand il n'y a pas de photo ou exclure les lignes des employés qui n'ont pas de photo ?

PS : merci d'utiliser les balises CODE et QUOTE plus lisible même si tu mets des couleurs
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 13h56   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
La fonction Nvl te permet de remplacer une "valeur" NULL par une autre valeur.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 14h49   #4
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Citation:
Envoyé par orafrance Voir le message
tu veux quoi ? Avoir photo.id égale à 0 à la place de NULL quand il n'y a pas de photo ou exclure les lignes des employés qui n'ont pas de photo ?

PS : merci d'utiliser les balises CODE et QUOTE plus lisible même si tu mets des couleurs
Oui je veux avoir photo.id égale à 0 à la place de NULL quand il n'y a pas de photo.

Citation:
Envoyé par mnitu Voir le message
La fonction Nvl te permet de remplacer une "valeur" NULL par une autre valeur.
Dans NVL tu donne explicitement la valeur qui va remplacer null, or la valeur que je désire est dans la table photo ( PHOTO.BLOB)
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 14h56   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
.. les champs PHOTO.ID et PHOTO.BLOB sont nulle...
Citation:
Envoyé par Devlop++ Voir le message
Oui je veux avoir photo.id égale à 0 à la place de NULL quand il n'y a pas de photo.
...
Nvl(photo_id,0)
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 14h58   #6
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
C'est pour le besoin d'une form (forms 6), car l'item image n'est peupler que suite a une interogation execute_query alors ce cliché vide doit etre dans la vue, forms n'accepte pas le code select BLOB into :BLOCK.ITEM from table (avec :BLOCK.ITEM de type image)

Merci.
et encore merci pour m'avoir répondu aussi vite.
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h00   #7
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Citation:
Envoyé par mnitu Voir le message
Nvl(photo_id,0)
oui, mais je veux avoir la photo ayant l' ID = 0 donc, le contenu stocker dans PHOTO.BLOB (LONg RAW) qui est une image.
Merci
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h10   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par Devlop++ Voir le message
Dans NVL tu donne explicitement la valeur qui va remplacer null, or la valeur que je désire est dans la table photo ( PHOTO.BLOB)
euh... ouais mais si photo.id est NULL comment tu sais quel photo faut aller prendre dans la table Photo ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h14   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par Devlop++ Voir le message
oui, mais je veux avoir la photo ayant l' ID = 0 donc, le contenu stocker dans PHOTO.BLOB (LONg RAW) qui est une image.
Merci
Code :
1
2
3
4
5
6
7
8
9
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 )
UNION ALL
SELECT EMP.EMPNO, EMP.DEPTNO, 0, (SELECT PHOTO.BLOB FROM PHOTO WHERE id=0)
FROM EMP
WHERE EMP.EMPNO NOT IN (SELECT EMPNO FROM PHOTO)
WITH READ ONLY
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h15   #10
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Citation:
Envoyé par orafrance Voir le message
euh... ouais mais si photo.id est NULL comment tu sais quel photo faut aller prendre dans la table Photo ?
C'est tout a fait ça, quand c'est null je doit joindre avec les données de l'employé la photo portant l' ID = 0 et son BLOB qui est le cliché vide et elle est dans la table avec le reste des photos
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h16   #11
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Je vais tester et je reposte
Merci
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h40   #12
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
J'ai l'erreur suivante lors de la crétion de la vue :
0, (SELECT PHOTO.BLOB FROM PHOTO WHERE id=0)
*
ERROR at line 6:
ORA-00997: illegal use of LONG datatype
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h49   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
t'as lancé EXACTEMENT la même requête ? T'as pas remplacé UNION ALL par UNION ou ajouter un DISTINCT ou ORDER BY ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 15h56   #14
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
J'ai fait exactement comment vous avez mentionner, aucun additif.
j'ai toujours

SELECT EMP.EMPNO, EMP.DEPTNO, 0, (SELECT PHOTO.BLOB FROM PHOTO WHERE id=0)
_______________________________________ *
ERROR at line 6:
ORA-00997: illegal use of LONG datatype
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 16h17   #15
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Si je remplace par :
ALTER TABLE "PHOTO" MODIFY("BLOB" BLOB)
La vue est crée pas de problème
mais est il possible de preserver le LONG RAW comme type pour PHOTO.BLOB ?
Merci.
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2008, 12h12   #16
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Je veux préserver le LONG RAW comme type pour PHOTO.BLOB, mes CANVAS de FORMS6 utilise des item image basé sur ce type de champs, comment je fait autrement sans le type BLOB.
Merci.
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 09h54   #17
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par Devlop++ Voir le message
mes CANVAS de FORMS6
ça aurait été pas mal de commencer par ça

Pourquoi tu veux un LONG RAW alors que le type BLOB est fait pour justement stocker des fichiers binaires
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 10h50   #18
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
Salut,
J'ai déjà posté sur le sous-forum Forms, et comme j'ai pas trouvé de solution j'ai posté ici et j'ai respecter la charte en posant le problème uniquement coté SQL.
En plus j'utilise la built-in read_image_file() sur FORMS6, avec un BLOB je ne sait pas comment y parvenir a lire & écrire des photos dans ma base de données. En lisant le tutoriel d'Helyos sur les larges objects, le package dbms_lob est indispensable mais je le possède pas.
Merci.
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 11h16   #19
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
tu dois l'installer. Exécute <ORACLE_HOME>\rdbms\admin\dbmslob.sql

pour info : http://download.oracle.com/docs/cd/A...mds.htm#104177
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 11h24   #20
Nouveau Membre du Club
 
Avatar de Devlop++
 
Inscription : avril 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : avril 2006
Messages : 86
Points : 26
Points : 26
En gardant le meme traitement pour un LONG RAW que voici :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
tool_env.getvar('DEV', dirname);
   dirname := dirname || '\IMG';
 
   v_filename := get_file_name('DEV',NULL, 'All Files (*.*)|*.*|'              ||
   'JPEG Files (*.jpg)|*.jpg|');
 
   IF v_filename IS NOT NULL then
      read_image_file(v_filename,'ANY','photo.blob');
      :ar_photo.emp := substr(v_filename,(length(v_filename)-7),4);
      :ar_photo.DESC := 'Image agent';
      :ar_photo.type := 'IMAGE';
   end IF;
j'ai créé une deuxième table dans le champs image est devenu BLOB au lieu de LONG RAW,

j'ecrit une photos dans ma table,
après une interrogation execute_query, elle me ramène les information concerant la photos(emp, desc, type) mais pas la photo : l'item reste vide
comment je fait ?
Merci.
Devlop++ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web