Oracle: изменение столбца VARCHAR2 на CLOB
У меня возникла проблема, когда данные, которые я пытался хранить в моем столбце varchar2 (4000), были слишком большими, поэтому я хочу изменить столбец на еще один, подходящий для хранения больших объемов текстовых данных. В частности, сериализованный массив.
-
Во-первых, CLOB - лучший тип данных, который я должен использовать для этой цели? Есть ли более подходящий тип данных?
-
Во-вторых, когда я пытаюсь изменить столбец с помощью обычного snyntax:
ALTER TABLE table MODIFY column CLOB
Я получаю следующую ошибку: ORA-22858: неправильное изменение типа данных
Какой самый простой способ изменить эту таблицу без потери каких-либо данных?
Ответы
Ответ 1
Самый простой способ, учитывая, что операция перехода из столбца varchar
в CLOB
запрещена, заключалась бы в создании нового столбца и перемещении данных из старого столбца в новый столбец:
ALTER TABLE some_table ADD (foo CLOB);
UPDATE some_table SET foo = old_column;
ALTER TABLE some_table DROP COLUMN old_column;
ALTER TABLE some_table RENAME COLUMN foo TO old_column;
Ответ 2
Столбец VARCHAR2 нельзя напрямую преобразовать в CLOB, но это можно сделать в 2 этапа:
- Конвертировать тип данных столбца из VARCHAR2 в LONG.
- Конвертировать тип данных столбца из LONG в CLOB.
ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;
Ответ 3
Для Oracle 11g:
ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;