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

SQL Oracle Discussion :

Probleme recherche textes


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut Probleme recherche textes
    Bonjour,

    Voilà j'ai un problème dans mon filtre de recherche suivant:


    "PRODUIT"."NOM_PRODUIT" = decode(:SEARCH_TEXT,'%null%',"PRODUIT"."NOM_PRODUIT",:SEARCH_TEXT)))

    Ma recherche ne marche que si le texte rentré est l'exacte copie de la colonne. Je recherche donc un moyen de faire une recherche par exemple avec la moitié du mot. De même une recherche avec un mot d'une phrase.

    Comment puis-je faire pour résoudre ce problème?

  2. #2
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par Pedro Lito
    Bonjour,

    Voilà j'ai un problème dans mon filtre de recherche suivant:


    "PRODUIT"."NOM_PRODUIT" = decode(:SEARCH_TEXT,'%null%',"PRODUIT"."NOM_PRODUIT",:SEARCH_TEXT)))

    Ma recherche ne marche que si le texte rentré est l'exacte copie de la colonne. Je recherche donc un moyen de faire une recherche par exemple avec la moitié du mot. De même une recherche avec un mot d'une phrase.

    Comment puis-je faire pour résoudre ce problème?
    un case when je pense ....

    DECODE fait une égalité pas un like ...
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    INSTR permet de savoir en quelle position se trouve la chaine (equivalent au like). renvoit 0 si pas trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NOM_PRODUIT  = DECODE(INSTR(:SEARCH_TEXT,'null'), 0, :SEARCH_TEXT,NOM_PRODUIT)
    C'est bizarre de tester 'null', j'espère que c'est un exemple.


    Edit : Enlevé le % dans le champ de recherche
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("PRODUIT"."NOM_PRODUIT"  LIKE '%'||:search_text||'%'  OR :search_text IS NULL)
    NB : Ne pas mettre de % dans :SEARCH_TEXT,
    (ni de '_' d'ailleurs)
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par miloux32
    un case when je pense ....

    DECODE fait une égalité pas un like ...

    Merci bien et tu verrais cela comment? Désolé mais je débute un peu en SQL, mis à part les semblant de cours à l'école sur ce sujet, je suis un peu perdu. J'apprends à tâton on va dire...

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garuda
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("PRODUIT"."NOM_PRODUIT"  LIKE '%'||:search_text||'%'  OR :search_text IS NULL)
    NB : Ne pas mettre de % dans :SEARCH_TEXT,
    (ni de '_' d'ailleurs)
    Merci pour le code, ça marche. Par contre quand il n'y a rien de marqué dans le texte, cela affiche tous les résultats. Tu as une solution?

    Merci d'avance. Et désolé pour mon débutantisme. ;-)

  7. #7
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    C'était dans ton exemple !
    Sinon
    vire le test IS NULL (c'est tres logique !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("PRODUIT"."NOM_PRODUIT"  LIKE '%'||:search_text||'%')
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garuda
    C'était dans ton exemple !
    Sinon
    vire le test IS NULL (c'est tres logique !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("PRODUIT"."NOM_PRODUIT"  LIKE '%'||:search_text||'%')
    Oui c'est ce que j'ai fait mais rien n'y fait... J'ai avant ce filtre un autre filtre par LOV, je te montre vite fait.

    where "FAMILLE"."ID_FAMILLE"="SOUS_FAMILLE"."ID_FAMILLE"
    and "SOUS_FAMILLE"."ID_SOUSFAMILLE"="PRODUIT"."ID_SOUSFAMILLE"
    and "PRODUIT"."ID_PRODUIT"="SYMPTOME"."ID_PRODUIT"
    and "SYMPTOME"."ID_SYMPTOME"="RASSEMBLE"."ID_SYMPTOME"
    and "RASSEMBLE"."ID_PANNE"="PANNE"."ID_PANNE"
    and (("FAMILLE"."ID_FAMILLE" = decode(:liste_famille3,'%null%',"FAMILLE"."ID_FAMILLE",:liste_famille3)
    and "PRODUIT"."ID_SOUSFAMILLE" = decode(:liste_sous_famille3, '%null%', "PRODUIT"."ID_SOUSFAMILLE", :liste_sous_famille3)
    and "PRODUIT"."ID_PRODUIT" = decode(:liste_produit3,'%null%',"PRODUIT"."ID_PRODUIT",:liste_produit3))
    or ("PRODUIT"."NOM_PRODUIT" LIKE '%'||:search_text||'%')))

    Ais-je fait une erreur?

  9. #9
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Ah mais c'est du forms !
    fallait le dire !

    D'ou viennent tes variables ? ::liste_famille3, etc ???

    D'autre part, fais la même chose pour tes autres tests (famille, sous famille, etc) .
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est vraiment moche comme code.

    Attention Garuda, tu ne codes pas la même chose, visiblement les variables contiennent la chaine de caractère "null"
    Et en plus dans ce cas on teste "PRODUIT"."NOM_PRODUIT = "PRODUIT"."NOM_PRODUIT (ce qui exclue les nom_produit à NULL)
    Au contraire du nom_produit like '%'
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garuda
    Ah mais c'est du forms !
    fallait le dire !

    D'ou viennent tes variables ? ::liste_famille3, etc ???

    D'autre part, fais la même chose pour tes autres tests (famille, sous famille, etc) .

    Mes variables sont des items faisant référence à des LOV. Je précise que je suis sous Oracle 10g. Les trois variables sont liées entre elles famille -> sous famille -> produit. Avant que je ne rajoute le search field, tout ça marchait bien. Mais apparement maintenant il affiche toutes les lignes dès lors que je ne mets rien dans le champ de recherche. :-(

  12. #12
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Mcm

    LIKE '%' EXCLUT les valeurs à null !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(*) from (select null nom from dual) where nom like '%'
    Resultat
    --> 0
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  13. #13
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Pedro lito

    Cette requete, c'est quoi ? Une requête de bloc ? Ou quoi ?

    D'ou vient ton search_text ?

    Tu n'as pas de raison de traiter differement 'nom_produit' de 'famille' ou 'sous_famille'.
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garuda
    Mcm

    LIKE '%' EXCLUT les valeurs à null !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(*) from (select null nom from dual) where nom like '%'
    Resultat
    --> 0

    Donc en gros tu es en train de me dire que logiquement ma requête lorsque le champ de texte est nul devrait me ressortir qqc de nul?

    Sinon j'ai essayé de tout remplacer comme ça:
    and (("FAMILLE"."ID_FAMILLE" LIKE '%'||:liste_famille3||'%'
    and "PRODUIT"."ID_SOUSFAMILLE" LIKE '%'||:liste_sous_famille3||'%'
    and "PRODUIT"."ID_PRODUIT" LIKE '%'||:liste_produit3||'%')
    or ("PRODUIT"."NOM_PRODUIT" LIKE '%'||:search_text||'%')))

    Et bien plus aucun filtre ne marche. J'ai pourtant bien gardé il me semble une recherche par deux filtres différents... Je me retrouve avec toutes mes lignes de la DB.

  15. #15
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Je pense qu'il faudrait que tu exprimes en francais (en oubliant 5mn le SQl)
    ce que doit faire ta requête (ou du moins son filtre).
    Ca nous permettrait d'y voir plus clair !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  16. #16
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Ote moins d'un doute

    est que tu peux avoir un litteral :liste_famille avec comme valeur 'null' (en toutes lettres et pas la valeur NULL) ?????
    Si oui, a quoi ca sert ???
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garuda
    Pedro lito

    Cette requete, c'est quoi ? Une requête de bloc ? Ou quoi ?

    D'ou vient ton search_text ?

    Tu n'as pas de raison de traiter differement 'nom_produit' de 'famille' ou 'sous_famille'.

    Mon search text, c'est un élément de la page de la version 10g. Donc je fait appelle à ce que j'écrit dans mon formulaire de requête.

    Donc je fait un Select From Where tout simplement où je pioche dans une colonne de ma DB. Je ne traite pas différement mes LOV, c'est uniquement que celle-ci sont hiérarchisées entre elles l'une filtre l'autre qui filtre celle d'après. ;-)

  18. #18
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Ote moins d'un doute

    est que tu peux avoir un litteral :liste_famille avec comme valeur 'null' (en toutes lettres et pas la valeur NULL) ?????
    Si oui, a quoi ca sert ???
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  19. #19
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garuda
    Ote moins d'un doute

    est que tu peux avoir un litteral :liste_famille avec comme valeur 'null' (en toutes lettres et pas la valeur NULL) ?????
    Si oui, a quoi ca sert ???

    Ma liste famille correspond à une LOV dynamique qui fait appel via du SQL à la ligne famille de la table du meme nom (oui je sais pas très logique mais bon...) sélectionée pour filtrer les tables.

    La LOV Dynamique:

    select "FAMILLE" d,
    "FAMILLE" r

    from "FAMILLE" "FAMILLE"


    Mes champs sont forcément non nuls, c'est tout ce que je sais... :-(

    Edit: Ca marche avec NULL mais ça ne résoud pas le problème. J'avais vu simplement dans un exemple 'null', alors je l'avais repris de la même manière. Voili voilou

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Petite précision,

    lors de ma requête, le prog n'arrive plus à distinguer soit un filtre (les listes), soit l'autre (le champ de recherche), ce qu'il faisait avant avec la fonction decode.

    and (("FAMILLE"."ID_FAMILLE" = decode(:liste_famille3,'%null%',"FAMILLE"."ID_FAMILLE",:liste_famille3)
    and "PRODUIT"."ID_SOUSFAMILLE" = decode(:liste_sous_famille3, '%null%', "PRODUIT"."ID_SOUSFAMILLE", :liste_sous_famille3)
    and "PRODUIT"."ID_PRODUIT" = decode(:liste_produit3,'%null%',"PRODUIT"."ID_PRODUIT",:liste_produit3))
    or ("PRODUIT"."NOM_PRODUIT" LIKE '%'||:search_text||'%')))


    Ou est mon erreur?

    Merci d'avance. je fais un:

    and (
    (filtre 1)
    or
    (filtre 2)
    )

Discussions similaires

  1. [Fichier] Problème fichier texte
    Par ben127 dans le forum Langage
    Réponses: 3
    Dernier message: 03/02/2006, 21h41
  2. Souvent j'ai le probleme (recherche de carractere...)
    Par GESCOM2000 dans le forum Access
    Réponses: 7
    Dernier message: 21/01/2006, 20h13
  3. Recherche texte dans txt
    Par Guillaume602 dans le forum Windows
    Réponses: 3
    Dernier message: 21/12/2005, 00h05
  4. [VB6][Objet OLE] probleme récupération texte
    Par dedella_al dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/10/2005, 19h54
  5. Probleme CSS : Text centrer alors que je le veux a gauche...
    Par vampyrx dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/07/2005, 23h53

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