Un po' di tempo fa avevo bisogno di cancellare tutti gli Indici su una tabella Oracle. Dopo alcune prove, ho creato il seguente codice PL/SQL:
BEGIN
FOR ind IN
(
SELECT index_name
FROM user_indexes
WHERE table_name = 'nome_tabella'
AND index_name NOT IN
(
SELECT unique index_name
FROM user_constraints
WHERE table_name = 'nome_tabella'
AND index_name IS NOT NULL
)
)
LOOP
execute immediate 'DROP INDEX '||ind.index_name;
END LOOP;
END;
Lo script elimina tutti gli indici che non sono referenziati dai vincoli della tabella. Ciò è importante, perché se la tabella ha un vincolo creato usando l'indice specificato, l'istruzione drop fallirà. Se si desidera utilizzare lo script, è sufficiente sostituire la stringa "nome_tabella" con il nome della tabella appropriata.