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

PL/SQL Oracle Discussion :

contraintes applicatives sur une colonne


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut contraintes applicatives sur une colonne
    Bonjour à tous,
    Alors voila je dois ajouter des contraintes applicatives sur une colonne DATENAIS de la table EMPLOYES:
    - DATENAIS >= AJD
    - DATENAIS ne peut-etre null:

    voici ma commande sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- ajout des contraintes applicatives : 
    -- date naissance obligatoire et > ajd
    ALTER TABLE EMPLOYES
    --DROP CONSTRAINT EmployesDateNaisNotNull
    --DROP CONSTRAINT EmployesDateNaisValide
     
    ADD CONSTRAINT EmployesDateNaisNotNull CHECK (DATENAIS IS NOT NULL)
    ADD CONSTRAINT EmployesDateNaisValide CHECK (TO_CHAR(DATENAIS, 'DDMMYYYY') >= TO_CHAR(current_date, 'DDMMYYYY'));
     
    -- activation des contraintes
    --ENABLE CONSTRAINT EmployesDateNaisNotNull
    --ENABLE CONSTRAINT EmployesDateNaisValide;
    et voici ce que me repond Oracle quand j'execute la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Erreur commençant à la ligne 4 de la commande :
    ALTER TABLE EMPLOYES
    --DROP CONSTRAINT EmployesDateNaisNotNull
    --DROP CONSTRAINT EmployesDateNaisValide
     
    --ADD CONSTRAINT EmployesDateNaisNotNull CHECK (DATENAIS IS NOT NULL)
    ADD CONSTRAINT EmployesDateNaisValide CHECK (TO_CHAR(DATENAIS, 'DDMMYYYY') >= TO_CHAR(sysdate, 'DDMMYYYY'))
    Rapport d'erreur :
    Erreur SQL : ORA-02436: variable de date ou système mal indiquée dans contrainte CHECK
    02436. 00000 -  "date or system variable wrongly specified in CHECK constraint"
    *Cause:    An attempt was made to use a date constant or system variable,
               such as USER, in a check constraint that was not completely
               specified in a CREATE TABLE or ALTER TABLE statement.  For
               example, a date was specified without the century.
    *Action:   Completely specify the date constant or system variable.
               Setting the event 10149 allows constraints like "a1 > '10-MAY-96'",
               which a bug permitted to be created before version 8.

  2. #2
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    C'est pas possible directement

    mais Soit tu ajoutes une colonne ...
    soit tu fais avec un trigger :

    1.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     CREATE TABLE T1
    (
      COL1  VARCHAR2(10 BYTE),
      COL2  DATE
     
    )
    ;
     
     create or replace function f_check_date
       ( v_mydate in T1.col2%type
        ) return varchar2 deterministic
        is
        begin
          return case when v_mydate >= sysdate then 'Y' else 'N' end;
        end f_check_date;
        /
     
     
     alter table T1
          add (col3 as (cast(f_check_date(col2) as varchar2(1))))
        /
     
     
      alter table T1
          add constraint EmployesDateNaisValide check (COL3 = 'Y')
       /

    2.trigger

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        create or replace trigger TRG_T1
    after insert or update on t1
    for each row
    begin
      if :new.col2 < sysdate then
        raise_application_error(-20000, '...');
      end if;
    end;
    /

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  3. #3
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Et au passage,
    TO_CHAR(DATENAIS, 'DDMMYYYY') >= TO_CHAR(sysdate, 'DDMMYYYY')
    ne compare pas des dates mais des chaines de caractères au format DDMMYYYY !
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/07/2007, 11h24
  2. [C# 2.0] Suspendre une contrainte sur une colonne
    Par frechy dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/04/2006, 07h47
  3. SQLServer 2000: Liste des contraintes sur une colonne ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2005, 16h13
  4. retrouver les contraintes sur une colonne
    Par kalari dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2005, 17h03
  5. [SYBASE ASE] Rajouter une contrainte null sur une colonne
    Par Little_Goldo dans le forum Sybase
    Réponses: 1
    Dernier message: 09/02/2005, 10h48

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