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
qui donne
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'
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.
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
Je ne peux donc pas ajouter de condition du genre
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AND search_condition NOT LIKE '%IS NOT NULL'
Si vous avez des idées je suis preneur...
Partager