Distinguer les CHECK CONSTRAINTS des NOT NULL
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:
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:
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:
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...