Подтвердить что ты не робот

Oracle: изменение столбца VARCHAR2 на CLOB

У меня возникла проблема, когда данные, которые я пытался хранить в моем столбце varchar2 (4000), были слишком большими, поэтому я хочу изменить столбец на еще один, подходящий для хранения больших объемов текстовых данных. В частности, сериализованный массив.

  • Во-первых, CLOB - лучший тип данных, который я должен использовать для этой цели? Есть ли более подходящий тип данных?

  • Во-вторых, когда я пытаюсь изменить столбец с помощью обычного snyntax:

    ALTER TABLE table MODIFY column CLOB
    

    Я получаю следующую ошибку: ORA-22858: неправильное изменение типа данных

    Какой самый простой способ изменить эту таблицу без потери каких-либо данных?

4b9b3361

Ответ 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;