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 :

Incompréhension Alter table :


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut Incompréhension Alter table :
    Bonjour, j'ai un petit probléme concernant 2 requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table employe add check ( salary >3000) or title= 'COMMERCIAL'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table employe add check ( salary >3000 and title = 'COMMERCIAL') or title <>'COMMERCIAL'
    Quelle est la différence entre ces deux requétes ?

    J'ai un peu de mal avec le "or"

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Par défaut
    Bonjour Bdptaki,

    Les sysntaxes d'ajout de contrainte que vous nous avez fourni ne sont pas correctes. A ma connaissance, vous ne pouvez pas introduire de AND et/ou OR sur une contraite.

    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
    create table employe (salary number, title varchar2(10));
    insert into employe values (3000,'COMMERCIAL');
    commit;
     
    Validation effectuÚe.
     
    SYSTEM@orcl> alter table employe add check (salary > 3000) or title = 'COMERCIAL';
    alter table employe add check (salary > 3000) or title = 'COMERCIAL'
                                                  *
    ERREUR Ó la ligne 1 :
    ORA-01735: option ALTER TABLE non valide
     
    18:00:43 SYSTEM@orcl> ALTER TABLE employe ADD CHECK ( salary >3000 AND title = 'COMMERCIAL') OR title <>'COMMERCIAL';
    ALTER TABLE employe ADD CHECK ( salary >3000 AND title = 'COMMERCIAL') OR title <>'COMMERCIAL'
                                                                           *
    ERREUR Ó la ligne 1 :
    ORA-01735: option ALTER TABLE non valide
    Que voulez vous savoir exactement ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    Merci pour votre repense mais cela existe.
    je suis sur oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE 10.2.0.1.0 Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
    Voici les 2 tables sur lesquelles je travailles : La table employer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Nom 			NULL ? 		        Type
    ID 			NOT NULL 	        NUMBER(7)
    LAST_NAME 	    NOT NULL 	                VARCHAR2(25)
    FIRST_NAME 	  				VARCHAR2(25)
    USERID 	  					VARCHAR2(8)
    START_DATE 	  				DATE
    COMMENTS 	  				VARCHAR2(255)
    MANAGER_ID 	  				NUMBER(7)
    TITLE 	  					VARCHAR2(25)
    DEPT_ID 	  				NUMBER(7)
    SALARY 	  					NUMBER(11,2)
    COMMISSION_PCT 	  	                NUMBER(4,2)
    La table département :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Nom 	NULL ? 	            Type
    ID 	NOT NULL 	NUMBER(7)
    NAME 	NOT NULL 	VARCHAR2(25)
    REGION_ID 	  	NUMBER(7)

    Voici la contrainte que je veux appliquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     c) Un employé ne peut avoir le TITLE = ‘President’ s’il a  été embauché après le 01/01/1990.
    La solution est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE S_EMP ADD  CHECK
           ((start_date <= to_date ('01011990','DDMMYYYY') and title = 'President' ) OR title <> 'President');
    La solution nous a été donnée en cours. Elle s'exécute trés bien sur mon oralce. Cependant je ne comprends pas la signification de celle-ci ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Par défaut
    Effectivement, je reviens sur ce que j'ai dit. J'ai recréé votre environnement, et ça fonctionne.
    Voici les tests :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    SYSTEM@orcl> CREATE TABLE S_EMP(
      2  Nom VARCHAR(25),
      3  ID NUMBER(7),
      4  LAST_NAME VARCHAR2(25),
      5  FIRST_NAME VARCHAR2(25),
      6  USERID VARCHAR2(8),
      7  START_DATE DATE,
      8  COMMENTS VARCHAR2(255),
      9  MANAGER_ID NUMBER(7),
     10  TITLE VARCHAR2(25),
     11  DEPT_ID NUMBER(7),
     12  SALARY NUMBER(11,2),
     13  COMMISSION_PCT NUMBER(4,2))
     14  ;
     
    Table crÚÚe.
     
    SYSTEM@orcl> ALTER TABLE S_EMP ADD  CHECK
      2         ((start_date <= to_date ('01011990','DDMMYYYY') AND title = 'President' ) OR title <> 'President');
     
    Table modifiÚe.
     
    SYSTEM@orcl> insert into s_emp (start_date,title) values ('01011990','President');
     
    1 ligne crÚÚe.
     
    SYSTEM@orcl> insert into s_emp (start_date,title) values ('01011991','President');
    insert into s_emp (start_date,title) values ('01011991','President')
    *
    ERREUR Ó la ligne 1 :
    ORA-02290: violation de contraintes (SYSTEM.SYS_C006686) de vÚrification
     
     
    SYSTEM@orcl> insert into s_emp (start_date,title) values ('01011991','Employe1');
     
    1 ligne crÚÚe.
    En fait la contrainte effectue 2 contrôles :
    Le premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    start_date <= to_date ('01011990','DDMMYYYY') AND title = 'President'
    à savoir les deux conditions start_date et title doivent être vérifiées ensemble, c'est à dire si le titre est PRESIDENT, la date doit être inférieur ou égale au 01/01/1990.
    Le second : teste juste que le titre est différent de PRESIDENT.
    Par contre, sans NOT NULL sur TITLE et sur START_DATE, je ne vois pas l'interet de la seconde partie de la contrainte.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    Le second :


    teste juste que le titre est différent de PRESIDENT.
    Par contre, sans NOT NULL sur TITLE et sur START_DATE, je ne vois pas l'interet de la seconde partie de la contrainte.
    Moi n'en plus je ne voix pas à quoi cela peut servir ?
    Je n'ai rien trouver sur google ni sur le bouquin SQL pour Oralce !!!

    Est ce que, c'est une nouvelle manière d'écrire ?
    A ce que je voix, tout mes exemples que j'ai pu avoir, pressentent cette structure avec la clause "OR" !!!

    A un peu bizarre cette manière d'effectuer une contrainte !

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    j'ai essayé de dérouler ça avec des cas pratiques, je me suis rendu compte que le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OR title <> 'President');
    était très important.

    En effet ceci représente tous les autres cas des employer qui ne sont pas présidents.
    Ne pas rajouter cette clause est entièrement car on bloque le fonctionnement des autres employer.

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

Discussions similaires

  1. Renommer une colonne avec ALTER TABLE...
    Par David.V dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2004, 10h33
  2. [débutant] conseils sur contraintes et alter table
    Par maysa dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 26/05/2004, 09h03
  3. [Delphi 2] Alter Table
    Par Form_Load dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/04/2004, 14h26
  4. Probleme 'ALTER TABLE' et 'FOREIGN KEY'
    Par maahta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2003, 14h25
  5. Alter table qui ne passe...
    Par Gential dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/06/2003, 17h48

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