VÉRIFICATION de la contrainte dans oracle pour vérifier une valeur entre les colonnes

J'ai une table appelée Room et il a des colonnes (ID, type, prix, etc...)

Je veux ajouter des contraintes pour les deux type et price comme:

  • si simple (s), alors le prix ne doit pas être supérieur à 50,
  • si double (d), alors le prix ne doit pas être supérieure à 100, et
  • si la famille (f), puis le prix ne doit pas être supérieure à 150

J'ai essayé de l'ajouter comme ça, mais il me fait une erreur. Pas sûr de savoir comment dois-je écrire ceci:

ALTER TABLE ROOM 
ADD (CONSTRAINT CHK_PRICE CHECK (
(TYPE='S' AND PRICE <= 50) AND 
(TYPE='D' AND PRICE <=100) AND 
(TYPE='F' AND PRICE <= 150)));

L'erreur renvoyée est:

SQL Error: ORA-02293: cannot validate (xxxx.CHK_PRICE) - check
constraint violated
02293. 00000 - "cannot validate (%s.%s) - check constraint violated"
*Cause:    an alter table operation tried to validate a check constraint to
           populated table that had nocomplying values.
*Action:   Obvious
nop....tous les prix sont en dessous de leur valeur requise
comment le savez-vous? L'erreur dit clairement que *Cause: an alter table operation tried to validate a check constraint to populated table that had nocomplying values.!!

OriginalL'auteur user1672735 | 2012-09-15