2010-10-15 17 views

Répondre

8

Vous pouvez récupérer le nom de la contrainte avec:

SELECT CONSTRAINT_NAME 
FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'xxx' 
AND CONSTRAINT_TYPE = 'U' 

Vous pouvez par exemple créer une procédure stockée qui exécute SQL précédente, stocke le résultat dans une variable et utilise cette variable dans ALTER TABLE DROP CONSTRAINT

EDIT: par exemple:

BEGIN 
    FOR r IN (
    SELECT TABLE_NAME, CONSTRAINT_NAME 
    FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'xxx' 
    AND CONSTRAINT_TYPE = 'U') LOOP 
    EXECUTE IMMEDIATE REPLACE(REPLACE(
     'ALTER TABLE #TABLE# DROP CONSTRAINT #CON#' 
     ,'#TABLE#',r.TABLE_NAME) 
     ,'#CON#',r.CONSTRAINT_NAME); 
    END LOOP; 
END; 
+0

Merci, cela a bien fonctionné pour mes fins. Bien que je puisse voir que dans certains cas, un soin particulier doit être pris, comme quand vous voulez garder certaines contraintes uniques et en laisser tomber d'autres, puisque vous ne pouvez pas simplement vous concentrer sur des colonnes spécifiques impliquées dans une contrainte. –