Je dois ajouter une contrainte à une table Oracle. Une colonne numérique doit être zéro ou unique (et> 0). J'ai essayé d'insérer des requêtes à l'intérieur de la définition ou des fonctions de la contrainte, mais elles ne sont pas autorisées. Une idée? Salutations, Marcelo.Colonne de contrainte de vérification Oracle soit zéro soit unique
Répondre
Si je comprends bien votre besoin, vous pouvez utiliser un index basé sur la fonction pour vérifier l'unicité uniquement sur les valeurs positives.
Par exemple:
SQL> create table checkUniqueTab(n number);
Table created.
SQL> create unique index i1 on checkUniqueTab(case when n > 0 then n end);
Index created.
Insertion des valeurs différentes travaillent:
SQL> insert into checkUniqueTab values (1);
1 row created.
SQL> insert into checkUniqueTab values (2);
1 row created.
Ici j'essaie d'insérer une valeur positive en double:
SQL> insert into checkUniqueTab values (1);
insert into checkUniqueTab values (1)
*
ERROR at line 1:
ORA-00001: unique constraint (ALEK.I1) violated
Je peux insérer plusieurs lignes avec 0 valeur:
SQL> insert into checkUniqueTab values (0);
1 row created.
SQL> insert into checkUniqueTab values (0);
1 row created.
Le résultat:
SQL> select * from checkUniqueTab;
N
----------
1
2
0
0
Cela suppose que vous avez déjà une contrainte sur votre table pour éviter d'insérer des valeurs négatives.
Cette solution est très soignée mais elle permet également de dupliquer des valeurs négatives. Donc je pense que nous avons encore besoin d'une contrainte de vérification pour appliquer '(n> = 0)'. – APC
C'est ce que je voulais !!! Je vous remercie! –
@APC: Vous avez raison; Je supposais qu'une telle contrainte existe déjà sur la table, mais il vaut mieux clarifier. Aller à modifier – Aleksej
pouvez-vous nous montrer la contrainte de vérification comment c'est? et aussi nous montrer l'insert? et DDL de la table serait un plus – Moudiz
Pourquoi zéro? Quelle est la règle métier que cette contrainte tente de faire appliquer? – APC
On dirait un doublon. http://stackoverflow.com/questions/42671008/how-do-i-add-a-not-null-column-and-a-check-constraint-in-one-line-in-oracle-11g il vous semble guyz travailler ensemble – XING