Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 08/05/2011, 17h59   #1
Invité régulier
 
Inscription : juillet 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 122
Points : 7
Points : 7
Par défaut requete SQL

Salut les amis,
J'ai besoin de votre aide: Je doit exécuter une requête SQL pour une base de données ORACLE, de telle façon que je peut extraire les champs de deux tables distinctes, ayant comme champs commun ('id'), et dont le champ b.lib doit contenir l'un des éléments de SPLIT(tb.libelleesp,';'). Autrement dit la requête doit ressembler à celle la , quoique qu'elle est bien évidement fausse :
Code :
1
2
3
4
5
 
SELECT * 
FROM banque b, tablebanque tb
WHERE b.id = tb.id AND
           b.lib CONTAINS (SELECT SPLIT(tb.libelleesp,';') FROM tablebanque tb)
Aidez moi pour trouver la bonne requête. J'aimerais bien que le problème se résoudra au niveau de la requête SQL, sans devoir passer par le code Java.
Merci d'avance les amis
le_misterioso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 18h24   #2
Invité régulier
 
Inscription : juillet 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 122
Points : 7
Points : 7
j'ajoute un exemple pour plus de précision :

Pour ce cas:
b.lib = "espece montant"
tb.libelle="espece;virement;liquide"
b.lib contient bien split(tb.libelle,';')[0]

Alors que dans ce cas:
b.lib="espece montant"
tb.libelle="cheque;remise;avance"
b.lib ne contient aucun élément de split(tb.libelle,';')

Merci
le_misterioso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 15h04   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
J'avoue que ça va être dur. Si un des lib ne contenait qu'une seule valeur ce serait possible simplement, mais là il faut tester pour tous les éléments de tb.libelleesp.


Fais une fonction qui vérifie chaque élément de libelleesp dans b.lib et qui renvoie 1 si Ok, 0 sinon
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pseudo-code
CREATE FUNCTION F_SPLIT_EXISTS(p_lib1 IN varchar2, p_lib2 IN varchar2) RETURN number
IS
v_retour NUMBER := 0;
v_pos NUMBER;
v_last_pos NUMBER := 1;
begin
 LOOP
  v_pos := INSTR(p_lib2, ';', v_last_pos);
manque le test pour dernier élément (v_pos sera = NULL)
Faudra penser à sortir de la boucle dans ce cas sinon boucle infinie
IF ';'|| REPLACE(p_lib1,' ', ';') LIKE SUBSTR(p_lib2, v_last_pos, v_pos - v_last_pos)
  THEN v_retour := 1; exit;
   END IF;
 END LOOP;
RETURN v_retour;
end;
 
SELECT * 
FROM banque b, tablebanque tb
WHERE b.id = tb.id
AND F_SPLIT_EXISTS(b.lib, tb.libelleesp) = 1
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 11h35   #4
Invité régulier
 
Inscription : juillet 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 122
Points : 7
Points : 7
Merci McM, je vais essayer cela
le_misterioso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 16h15   #5
Invité régulier
 
Inscription : juillet 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 122
Points : 7
Points : 7
Bonjour,
en retournant à mon problème, je doit absolument pas utiliser du plsql. yy'a-t-il autre solution en utilisant la requete sql seulemnt; sinon j vais exploiter la requete par du code java, chose qui est un peu alourdissante.
Veuillez m'aidez SVP, et merci.
le_misterioso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 13h31   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Suivant ta version, tu peux peut être utiliser une transfo xml pour passer d'une chaine de caractère en tableau.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM 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 12h54.


 
 
 
 
Partenaires

Hébergement Web