quand tu dis "impossible d'enregistrer", tu peux préciser?
ce que tu peux faire c'est d'abord exporter les indexes, les effacer puis les recréer.
Pour export un index, utilise TOAD, SQL*Developer, DBMS_METADATA ou tout autre outil. Sans doute est-ce inutile car tu as sûrement le code de création des indexes documenté quelque part
Ex avec DBMS_METADATA
1 2 3 4 5 6 7 8
| SET PAGES 9999 LIN 2000 LONG 1000000 LONGC 2000 HEA off FEED OFF
EXEC dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE)
SELECT dbms_metadata.get_ddl('INDEX',INDEX_NAME,user)
FROM (
select distinct index_name
from USER_IND_EXPRESSIONS
WHERE table_name='T'
); |
output:
CREATE INDEX "SCOTT"."I" ON "SCOTT"."T" (UPPER("X"));
Pour effacer les indexes, DROP INDEX. Par exemple dynamiquement
1 2 3 4 5 6 7 8
| set serverout on size 1000000
begin
for f in (SELECT distinct index_name from USER_IND_EXPRESSIONS WHERE table_name='T') loop
dbms_output.put_line('DROP INDEX "'||f.index_name||'";');
-- execute immediate 'DROP INDEX "'||f.index_name||'"';
end loop;
end;
/ |
Tu modifies ta table :
ALTER TABLE T MODIFY (X VARCHAR2(9))
Ensuite tu les recrées les index exportés
CREATE INDEX "SCOTT"."I" ON "SCOTT"."T" (UPPER("X"));
PS: Le drop dynamique, attention, si tu te plantes et que tu effaces tout, et bien zut!
Partager