Oracle: disabilitare/abilitare tutti i constraints su una tabella

Problema: si devono disabilitare e successivamente riabilitare tutti i constraints su una tabella (senza disabilitarli ad uno ad uno!)

Soluzione: recuperare i nomi dei constraints dalle tabelle di sistema ed effettuare le alter table sfruttando un ciclo. (Fonte Stackoverflowhttp://stackoverflow.com/questions/128623/disable-all-table-constraints-in-oracle)

Disable all constraints:

BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'ENABLED'
AND t.table_name = 'MY_TABLE_NAME'
ORDER BY c.constraint_type DESC)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
END LOOP;
END;
/

Enabling the constraints again:

BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'DISABLED'
AND t.table_name =  'MY_TABLE_NAME'
ORDER BY c.constraint_type)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
END LOOP;
END;
/

(eliminando il filtro sul nome della tabella si può effettuare l’operazione su tutte le tabelle dello schema)

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...