2013-12-16 2 views
2

У меня есть база данных, а некоторые текстовые поля - CLOB, мне нужно изменить большинство из них на VARCHAR2.Oracle SQL. Как изменить тип поля таблицы CLOB -> VARCHAR2

Пытались сделать это с помощью инструмента SQL Developer, нажав кнопку Изменить на столе, но получаю ошибку как этот:

Следующий оператор SQL не удалось:

ALTER TABLE TBL_PEOPLE MODIFY (PERSON VARCHAR2(150)) 

Хотите спросить, как может это изменение должно быть сделано

ответ

2

Вы не можете, напрямую. Код, который вы пробовали, получит «ORA-22859», предположительно. (Конечно, полезно показать фактические ошибки, которые вы получаете).

Вам нужно будет добавить новую колонку varchar2; скопируйте данные через - или подстроку, если она может быть больше, чем новый столбец, который вы создаете; снимите столбец clob. Вы можете переименовать столбцы, чтобы они выглядели достаточно прозрачными.

Как в этом SQL Fiddle:

alter table tbl_people rename column person to clob_person; 

alter table tbl_people add (person varchar2(150)); 

update tbl_people set person = clob_person; 

alter table tbl_people drop column clob_person; 

Очевидно не удалить старую колонку, пока вы не уверены, что данные копируются без ошибок. Также учитывайте любые ограничения, индексы и т. Д., Которые могут существовать в старом столбце; их нужно будет воссоздать. И все, что ссылается на старый столбец, будет признано недействительным - обычно процедуры будут перекомпилированы при следующем использовании.

Так что будьте осторожны, сначала проверьте его и спланируйте время простоя.

Смежные вопросы