IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

requete SQL


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    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

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Merci McM, je vais essayer cela

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    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.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Suivant ta version, tu peux peut être utiliser une transfo xml pour passer d'une chaine de caractère en tableau.

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 10h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 17h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 17h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 12h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo