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 :

Gestion des paramètres dans le temps


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut Gestion des paramètres dans le temps
    Bonjour à tous,

    Je ne sais pas si je dois poster ici, mais voilà mon problème:

    Je dois gérer des tables de 'paramètres' exemple: 'couleurs'.
    La table est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Code --> I
    Beg_date -->I
    Exp_date
    Label
    ...
    La primaryKey étant code et beg_date

    beg_date et exp_date sont la dates de début et de fin de validité du code

    Je peux donc avoir ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    B - 01/01/2009 - 01/01/2015 - bleu 
    R - 01/01/2009 - 01/01/2015 - rouge
    et quelqu'un peut modifier en transformant le bleu en beige par exempleon expire donc le bleu à la date du jour-1 et on crée le beige à la date du jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    B - 01/01/2009 - 1/05/2009 - bleu 
    R - 01/01/2009 - 01/01/2015 - rouge
    B - 02/05/2009 - 01/01/2015 - beige
    Peut-on dans Oracle vérifier assez aisément les chevauchement de ces codes? car si j'avais créé le beige comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B - 02/01/2009 - 01/01/2015 - beige
    cela aurait fonctionner, pas de blocage dans la DB, mais ca n'a pas de sens d'avoir 2 memes codes paramètres au 01/01/2009, l'un bleu et l'autre beige.

    Etant donné que ce problème est courant dans le developpement d'application, je me demandais si Oracle avait prévu quelque chose 'd'automatique' pour vérifier ces chevauchements.

    Merci d'avance.

    PS: pour l'instant, on utilise une comparaison pure et simple de chaque intervalle pour les records ayant les mêmes codes.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Il faut rajouter votre date de début à votre clef primaire.

    Et il vous faut une table calendrier aussi, ça vous servira en reporting.

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Ben ma date de début est déjà dans la clé primaire (voir mon premier post)
    Mais cela ne suffit pas à interdire le chevauchement ou pas de records!!!!

    A quoi sert une table calendrier?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Au temps pour moi ça m'avait échappé.

    Mais si vous avez bien votre PK, vous n'aurez pas pu créer beige au 01/01/2009 et donc vous n'avez plus de question

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Au temps pour moi, j'avais fais une erreur en exposant mon probleme! Je viens de rectifier:

    Si je mets ceci dans la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B - 02/01/2009 - 01/01/2015 - beige
    Alors Oracle accepte, or ca n'a pas de sens fonctionnel!!

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    J'avoue que je ne vois pas où est l'erreur fonctionnelle.

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Oracle ne fournit par de mécanisme spécifique pour vérifier le non chevauchement des intervalles de temps définis par 2 colonnes de type date.

    Vous pouvez coder un trigger comme dans documenté sur le message AskTom suivant:
    http://asktom.oracle.com/pls/asktom/...42171194352295 qui donne un extrait de son livre Expert One on One à ce sujet. Notez bien les restrictions sur la concurrence d'accès.

  8. #8
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Merci pifor, je vais regarder.

    Pour répondre à Waldar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    B - 01/01/2009 - 1/05/2009 - bleu 
    B - 02/01/2009 - 01/01/2015 - beige
    R - 01/01/2009 - 01/01/2015 - rouge
    on voit très bien qu'entre le 02/01/2009 et le 1/05/2009, le code 'B' est à la fois bleu et beige, ce qui n'est pas admissible.

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ah oui merci, décidément j'ai les yeux collés aujourd'hui.
    Vous pouvez très facilement identifier les erreurs.
    A vous de voir si c'est votre date de fin de bleu ou votre date de début de beige qui est fausse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH Couleurs AS
    (
    select 'B' as Code, 'bleu' as Nom, to_date('01/01/2009', 'dd/mm/yyyy') as Dtdeb, to_date('01/05/2009', 'dd/mm/yyyy') as Dtfin from dual union all
    select 'B', 'beige', to_date('02/01/2009', 'dd/mm/yyyy'), to_date('01/01/2015', 'dd/mm/yyyy') from dual union all
    select 'R', 'rouge', to_date('01/01/2009', 'dd/mm/yyyy'), to_date('01/01/2015', 'dd/mm/yyyy') from dual
    )
    select * from
    (
        select C.*, lag(DtFin) over(partition by Code order by Dtdeb asc) Dtdeb_M1
        from Couleurs C
    ) 
    where Dtdeb_M1 <> DtDeb

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/08/2015, 18h31
  2. [2012] Gestion des paramètres dans une procédure (multiple or)
    Par Philace86 dans le forum Développement
    Réponses: 6
    Dernier message: 30/03/2015, 17h51
  3. Réponses: 0
    Dernier message: 19/11/2013, 07h54
  4. Gestion des headers dans un Makefile
    Par Weren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/11/2004, 10h44
  5. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20

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