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 :

contrainte check et fonction


Sujet :

SQL Oracle

  1. #1
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut contrainte check et fonction
    Bonjour,

    j'aurais souhaité avoir une contrainte déclarative qui vérifie qu'un champ année soit compris entre 2000 et l'année en cours.
    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    create table dates (annee number(4) not null 
    constraint ckc_annee check (annee between 1998 and to_number(to_char(sysdate, 'YYYY'))
    ));
    Mais ça ne passe pas. Visiblement l'appel à sysdate plante.
    J'ai essayé de créer une fonction retournant l'année en cours mais ça ne marche pas non plus.
    J'aurais aussi voulu étendre ma contrainte année encours-4, année en cours +1.
    Merci pour les idées
    Bonne fin de journée

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Il faut non seulement lire l'anglais, mais aussi le néerlandais !

    Pour notre ami r83, vous pourrez retrouver ici les limites d'implémentation des contraintes CHECK : http://oracle.developpez.com/faq/?page=3-1#check.

    Baser une contrainte CHECK sur SYSDATE est de toute façon fonctionnellement bancal, et essayer de faire prendre des vessies pour des lanternes à Oracle, en lui faisant avaler une fonction faussement déterministe, ne sert à rien.
    Certes, au moment de l'insertion, ça semble faire parfaitement l'affaire, mais si une telle contrainte est par la suite désactivée puis réactivée, le SYSDATE correspondra non plus à la date d'insertion, mais à la date de réactivation de la contrainte, d'où un contrôle à géométrie assez variable.

    Je ne suis pas certain qu'un déclencheur réponde plus rigoureusement au besoin fonctionnel, et je crois qu'on ne peut valablement s'en sortir qu'en ajoutant une colonne DATE_INSERT dans la table, qu'on peut alors utiliser fiablement dans une contrainte CHECK.

  4. #4
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut
    Effectivement ça semble lgique.... J'avais vérifié dans la vue user_constraints et la contrainte gardait effectivement le sysdate, ce qui faisait qu'elle était évaluée à chaque mise à jour de la table. ça m'avait plu, mais je n'avais pas pensé au disable/enable.
    Merci pour la réponse, bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. contraintes check
    Par djeman dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 10/01/2009, 18h33
  2. Emulation contrainte check avec fonction
    Par randriano dans le forum PL/SQL
    Réponses: 17
    Dernier message: 18/09/2008, 10h16
  3. Contrainte CHECK Conditionnelle...
    Par Moskito dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/02/2006, 23h09
  4. Modification d'une contrainte Check
    Par linou dans le forum Oracle
    Réponses: 7
    Dernier message: 03/10/2005, 11h25
  5. [Debutant] Contrainte CHECK
    Par TeQ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/01/2004, 11h18

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