Vérifier l'existence d'une contrainte NOT NULL
Bonjour,
Je cherche à écrire une requête pour me permettre de vérifier l'existence d'une contrainte NOT NULL sur une colonne donnée.
Ma base:
Citation:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
Je voulais passer par les vues USER_CONSTRAINTS et USER_CONS_COLUMNS avec quelque chose du genre:
Table de test:
Code:
1 2 3 4 5
| CREATE TABLE ADA_TEST1
(
ID NUMBER NOT NULL,
VAL VARCHAR2(15)
); |
Requete:
Code:
1 2 3 4 5 6 7
| SELECT COUNT(*)
FROM USER_CONS_COLUMNS CC
INNER JOIN USER_CONSTRAINTS C ON (C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME)
WHERE C.TABLE_NAME='ADA_TEST1'
AND CC.COLUMN_NAME='ID'
AND C.CONSTRAINT_TYPE='C'
AND C.SEARCH_CONDITION like '% NOT NULL'; |
Ce qui me renvoie une splendide:
Citation:
ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : LONG
En effet la colonne USER_CONSTRAINTS.SEARCH_CONDITION est un LONG...
Un tour sur ask tom, et je vois que:
- Il ne faut pas utiliser de LONG (oui mais là je suis innocent)
- On peut créer une fonction PL pour faire un SUBSTR()
Avant de créer la fonction PL qui ressemble plus à un palliatif qu'a autre chose, est-ce que quelqu'un verrait un autre moyen de tester l'existence d'une contrainte not null sur un colonne donnée?
Merci :)