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 :

problème de vérification avec between.


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Par défaut problème de vérification avec between.
    Bonjour tout le monde,

    Mon problème est le suivant
    j'ai une table horaire contenant n lignes chaque ligne de la table est définie par 4 attributs : code_personne,hr_debut,hr_fin,jour.

    Or lors de l'insertion d'une ligne,il faudrait vérifier que la personne X est libre de l'heure1(debut) à l'heure2(fin).

    Exemple:
    si une personne e1 enseigne le lundi de 8 à 10, il faudrait d'abord vérifier qu'il est libre le lundi de 8 à 10hr.

    J'ai fait ma propre requête en utilisant la négation, mais ça marche pas comme je veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "  select count(*) from horaire where CODE_personne = '"+per+"' and jour='"+jrr+"' and  H_DEB between '" +
                        deb +"' and '" + fin +"' and H_FIN between '" + deb +"' and '" + fin +"'"
    PS:
    si le nombre de lignes = 0 condition vérifiée sinon condition non vérifiée.

    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    transformez votre condition "and" entre les 2 tests d'heure par un "OR" et encadrez tout ceci avec des parenthèses.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour,

    transformez votre condition "and" entre les 2 tests d'heure par un "OR" et encadrez tout ceci avec des parenthèses.
    Heyyy PunKof

    il s'agit bien d'un OR puisque j'ai entamé la négation tout de même il y'a un petit problème, à l'insertion d'une ligne avec hr_debut=8h et hr_fin=10h (ça marche :la ligne est insérée dans la table )
    Or lorsque je désire insérer une autre ligne avec hr_debut=10 et hr_fin=12
    il ne l'insère pas c'est comme si il y'a une erreur dans la condition between.
    Comment puis-je régler cette erreur ?

    PS : les deux lignes ont le même code_pers et le même jour

    Merci d'avance pour votre réponse

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Quels sont les types de tes colonnes, et quelles données mets tu dedans?

    Quelle est la requête exacte que tu executes, (le résultat de tes concaténation)?

    Quel est ton SGBD?
    a+
    Soazig

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    Quels sont les types de tes colonnes, et quelles données mets tu dedans?

    Quelle est la requête exacte que tu executes, (le résultat de tes concaténation)?

    Quel est ton SGBD?
    a+
    Soazig
    Bonjour,

    les types de mes colonnes sont des varchar, les données sont issues des variables que j'ai déclaré dans mon programme JAVA.
    Rq : j'ai pas de problème de déclaration

    Sinon pour ta dernière question, j'utilise Oracle.

    Merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Corrigez moi si je me trompe :

    Vous lancez cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count(*) 
    from horaire 
    where CODE_personne = +per+ and jour=+jrr+ and H_DEB between +deb+ 
    and +fin+ and H_FIN between +deb+ and +fin+
    si cette requête retourne 0 => vous fait l'insertion
    si cette requête retourne 1 => vous ne fait pas l'insertion


    Si on reprend votre exemple :
    1ere insertion en base :
    deb fin
    8 10

    2eme tentative d'insertion en base :
    deb fin
    10 12

    ici votre requête retournera effectivement 0 (donc insertion possible)

    Mais si on essai ceci :
    2eme tentative d'insertion en base :
    deb fin
    7 9

    Votre requête retournera aussi 0 !

    A tout bien réfléchir les prédicats between ne sont pas la meilleur solution.


    Concernant votre 2eme problème, avez vous une erreur SQL retournée ?
    Quelle est la définition de votre table ? (en particulier la PK ?)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Par défaut
    Merci PunKoff
    Ouiiii bien vu l'utilisation de between n'est pas la bonne solution à mon problème.
    tout de même opter pour les opérateurs logique (<,>,<=,>=) nécessite un travail de réflexion.

    tu n'aurais pas par hasard 1 méthode simples sans passer par les opérateurs (parce que sinon ma requête sera trop longue à écrire :p).

    Rq :J'ai pas de problème avec ma table mon problème c'est avec le between.

    Merciii encore

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    tu n'as pas répondu à ma question sur le format de stockage des données. ni la requete exacte que tu envoie à ORACLE (met un point d'arret, un espion), nous on travaille en SQL.
    Si j'ai posé la question sur le format des données c'est que la chaine "8" n'est pas inférieure à la chaine "10", et donc tes comparaison avec between risque de foirer également.

    A+
    Soazig

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Par défaut
    désolé SoaziG,
    je croyais que tu partais loin du problème, j'ai oublié qu'il y a des personnes qui utilisent d'autres SGBD.

    pour la requête que j'envoie sur oracle c'est celle que j'ai cité lors de l'ouverture de la discussion.

    Que veux-tu dire avec format de stockage : les types attributs de ma table c'est ça ?

    sinon pour la comparaison Oracle n'a pas de problème de comparaison, j'ai essayé avec des requêtes simples.

    Merci

Discussions similaires

  1. problème avec between date
    Par jeanpierre215 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/09/2010, 17h58
  2. problème avec between
    Par Paula15 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/09/2010, 14h33
  3. Problème de date avec between
    Par sebac dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2007, 20h16
  4. Réponses: 4
    Dernier message: 13/02/2006, 18h58
  5. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44

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