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:
Je voulais passer par les vues USER_CONSTRAINTS et USER_CONS_COLUMNS avec quelque chose du genre: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
Table de test:
Requete:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE TABLE ADA_TEST1 ( ID NUMBER NOT NULL, VAL VARCHAR2(15) );
Ce qui me renvoie une splendide:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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';
En effet la colonne USER_CONSTRAINTS.SEARCH_CONDITION est un LONG...ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : 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
Partager