Като алтернатива на премахването и повторното добавяне на колоната можете да използвате shrink space
клауза
:
ALTER TABLE t MODIFY LOB (c) (SHRINK SPACE);
db<>цигулка
, което е 18c, но трябва да работи и в 11g. (По-късно:да, прави го в 11gR2 с retention none
така или иначе пропуснат; SQL Fiddle обаче не го харесва.)
Пропуснах този детайл, но все още работи; просто се нуждаете от допълнителна стъпка, за да намерите скритата BLOB колона, архивираща колоната XMLType, както е показано тук . Направих alter
динамично само за да вземете това в движение, но ако можете да го намерите ръчно, можете просто да го включите сами в изявлението очевидно:
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;
/
Вероятно си струва да се отбележи, че това работи с basicfile
съхранение, както е показано във вашата минимална демонстрация, но може да не работи с securefile
съхранение - поне част от времето, което извежда ORA-10635:Невалиден тип сегмент или таблично пространство.