Bonjour à tous,

Je cherche à écrire une requête qui puisse me donner la liste des CHECK CONSTRAINT d'une table

Je suis donc parti sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
SELECT constraint_name, search_condition
  FROM dba_constraints
 WHERE owner = 'MDSYS' 
   AND table_name = 'MD$DIM'
   AND constraint_type ='C'
qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
CONSTRAINT_NAME	SEARCH_CONDITION
 
MD17	"CNAME" IS NOT NULL
MD18A	"DIM#" IS NOT NULL
MD18B	dim#>0 AND dim#<=32
MD19A	"NAME" IS NOT NULL
MD19B	name = upper(name)            AND            length(name) <= 19
MD20	"LB" IS NOT NULL
MD21	"UB" IS NOT NULL
MD22A	"SCALE" IS NOT NULL
MD22B	scale >= 0
MD23A	"LEV" IS NOT NULL
MD23B	lev >  0
le problème est que je veux faire la distinction entre les CHECK et les NOT NULL et que cette information est dans la colonne SEARCH_CONDITION qui est un LONG.

Je ne peux donc pas ajouter de condition du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
AND search_condition NOT LIKE '%IS NOT NULL'
Histoire de compliquer un peu les choses. Je suis en 8.1.7.4 et je dois pouvoir faire cette requête a partir d'un user DBA différent de SYS. Je ne peux donc pas faire un bout de code PL/SQL qui lit le LONG dans la table DBA_CONSTRAINTS puisque le droit d'exécution sur cette table provient du rôle DBA et je ne peux pas l'attribuer directement a mon utilisateur

Si vous avez des idées je suis preneur...