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 :

Probleme majeur sur Oracle XE : limite dans ma clause where


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Probleme majeur sur Oracle XE : limite dans ma clause where
    J'ai un problème basique lié à un encodeur de requete générique. Les requetes sont complexes mais on peut simplifier le pb ainsi
    (J'ai oracle 10 XE + java et JDBC driver donné avec Oracle).

    Je fais :
    select
    USER.USR_ID
    from
    USER

    Cela marche nickel : 10 entrées par exemple.

    Maintenant, en prévision d'une clause where j'ajoute une table dont je ne demande aucun champ :

    select
    USER.USR_ID
    from
    USER, SAMPLING_ID

    Pour l'instant je ne mets pas encore de where.

    Si SAMPLING_ID contient une ligne ou plus : OK, j'ai bien mes réponses.
    Si SAMPLING_ID est vide, alors j'ai un retour vide (empty result) sans même mettre un where.
    Bien évidemment ensuite avec le where je n'ai rien non plus.

    Comment encoder cette requete ?

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    produit cartésien, ça vous dit quelque chose ?

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select
      2  USER.USR_ID
      3  from
      4  USER;
    USER.USR_ID
        *
    ERROR at line 2:
    ORA-00923: FROM keyword not found where expected
    mauvaise idée d'appeler sa table USER, qui est un mot réservé...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Suite
    Ok pour la remarque sur USER, en fait mes tables ont des noms plus compliqué alors j'avais renommé et simplifié avant de mettre sur le forum car la requete fait 3 lignes .
    Mais en fait je comprends le pb : effectivement, le select fait un produit cartesien et me retourne une liste vide apres je peux faire tous les where que je veux ...

    Par contre dans mon cas ce n'est pas simple de faire autrement car je cherche des réponse dans une liste de tables, associées 3 par trois par des unions. Sur certaines j'ai des filtres et je veux celle ou il y a des réponses.

    Comme si j'avais une table PRODUIT et des infos complémentaires pour TV (union avec produit), HIFI (union avec produit) etc...

    je veux des infos sur les produits tels que si c'est une TV alors xxxx ou bien si c'est une HIFI alors ... du coup si une liste est vide, tout mon produit cartésien fait Flop.
    la requete est générée automatiquement à partir de filtres utilisateurs.
    :-(
    Il faut que l'écrive autrement

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Il faut que vous fassiez une jointure externe entre votre table user et sampling_id.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Clause where qui ajoute des entrées
    Effectivement sur le principe ca a l'air de marcher : bizarre comme syntaxe de where qui AJOUTE des réponses à la meme clause sans le where.

    select
    USR_ID
    from
    USER_ATPI, SAMPLING_ID


    --> Vide

    select
    USR_ID
    from
    USER_ATPI, SAMPLING_ID
    where
    USER_ATPI.USR_ID = SAMPLING_ID.SAM_ID (+)

    --> plusieurs réponses

    Il n'y a pas de syntaxe standard SQL pour ces Outer Join ? + a l'air d'etre spécifique à Oracle...
    je me serai aussi attendu a avoir ce outer join dans le from ?

  7. #7
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  USR_ID
    from  USER_ATPI
    LEFT JOIN  SAMPLING_ID
    ON USER_ATPI.USR_ID = SAMPLING_ID.SAM_ID

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Effectivement
    Vos réponses en LEFT JOIN et le Outer join (+) marchent sur mon exemple simple. Par contre à encoder dans ma requete générale qui est générée cela s'annonce coriace quand il y a plein de tables et de jointures possibles.

    En fait c'eest un utilisateur dans une IHM qui saisit 1 à n conditions de filtrage, y compris à travers de relation sur des tables qui sont liées par une union.

    Je me demande si le plus simple a écrirer et maintenir ne serait pas tout simplement d'envoyer autant de fois la requete select que j'ai de or et de faire une UNION :

    plutot que d'écrire

    Select A.ID from A,B,C where (<condition sur A et B>) OR (<condition sur A et C>)

    de faire
    Select A.ID from A,B where (<condition complexe sur A et B>)
    UNION
    Select A.ID from A,Cwhere (<condition complexe sur A et C>)
    Cela aurait l'avantage d'etre symétrique et de pouvoir etre testé par morceaux.

    Il n'y a d'ailleurs pas des jointures que 2 par 2, cela m'aurait bien arrangé de faire la recherche sur A,B et C d'un coup car ce que j'ai c'est la liste des tables impactées A,B,C... et la liste des conditions a vérifier sur tout ce beau monde dans un filtre (converti en un where).

    Je tente de voir la complexité de l'union.

Discussions similaires

  1. [PPT-2003] Probleme message sur lien vers fichier dans visionneuse
    Par Franck_P dans le forum Powerpoint
    Réponses: 0
    Dernier message: 08/07/2009, 13h53
  2. Saturation CPU sur ORACLE 9.2 dans une View
    Par jfvisquet dans le forum SQL
    Réponses: 3
    Dernier message: 20/10/2008, 14h14
  3. probleme urgent sur oracle
    Par kakashi82 dans le forum Oracle
    Réponses: 2
    Dernier message: 09/07/2007, 15h22
  4. Réponses: 3
    Dernier message: 18/09/2006, 20h55
  5. probleme avec le caractere 'Z' dans ma clause WHERE
    Par dibox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/04/2004, 12h21

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