Como alternativa a eliminar y volver a agregar la columna, puede usar el shrink space
cláusula
:
ALTER TABLE t MODIFY LOB (c) (SHRINK SPACE);
db<>fiddle
, que es 18c pero también debería funcionar en 11g. (Más tarde:sí, lo hace en 11gR2 con retention none
omitido de todos modos; Sin embargo, a SQL Fiddle no le gusta.)
Se perdió ese detalle, pero aún funciona; solo necesita un paso adicional para encontrar la columna BLOB oculta que respalda la columna XMLType, como se muestra aquí . He hecho el alter
dynamic solo para recogerlo sobre la marcha, pero si puede encontrarlo manualmente, entonces puede simplemente conectarlo a la declaración usted mismo, obviamente:
DECLARE
l_name USER_TAB_COLUMNS.COLUMN_NAME%TYPE;
l_stmt VARCHAR2(100);
BEGIN
select column_name
into l_name
from user_tab_cols
where
table_name = 'T' and hidden_column = 'YES'
and
column_id = (
select column_id
from user_tab_cols
where table_name = 'T' and column_name = 'X'
);
l_stmt := 'ALTER TABLE t MODIFY LOB ("' || l_name || '") (SHRINK SPACE)';
dbms_output.put_line(l_stmt);
execute immediate l_stmt;
END;
/
Probablemente valga la pena señalar que esto funciona con basicfile
almacenamiento, como se muestra en su demostración mínima, pero podría no funcionar con securefile
almacenamiento:al menos parte del tiempo que genera ORA-10635:segmento o tipo de espacio de tablas no válido.