Ответ 1
(как и предыдущий ответ) и здесь код:
ALTER TABLE atable
ADD (tmpdetails CLOB);
UPDATE atable SET tmpdetails=details;
COMMIT;
ALTER TABLE atable DROP COLUMN details;
ALTER TABLE atable
RENAME COLUMN tmpdetails TO details;
У меня есть данные столбца, разработанные как varchar в Oracle, эта БД теперь используется для клиентов, а некоторые строки уже хранятся.
Теперь я хочу изменить данные столбца в столбце Clob. Что такое умный способ сделать это?
(как и предыдущий ответ) и здесь код:
ALTER TABLE atable
ADD (tmpdetails CLOB);
UPDATE atable SET tmpdetails=details;
COMMIT;
ALTER TABLE atable DROP COLUMN details;
ALTER TABLE atable
RENAME COLUMN tmpdetails TO details;
Но это не будет поддерживать позицию вашей колонки. Он переместит вашу колонку в конец таблицы. Поэтому, если вы хотите сохранить позицию своей колонки, выполните следующие шаги.
alter table atable add (tempdetails varchar2(4000));
update atable set tempdetails = details;
update atable set details = null; -- this is necessary to change data type
alter table atable modify details long; -- this is required because you can not change directly to clob.
alter table atable modify details clob;
update atable set details=tempdetails;
alter table atable drop column tempdetails;
Это то, как вы сохраните данные и положение своего столбца без изменений даже после изменения типа данных. Подробную информацию см. Здесь: http://www.oraclebin.com/2012/12/how-to-change-varchar2-to-clob-datatype.html
если вам нужно, чтобы ваши данные таблицы были доступны во время процесса. посмотрите Dbms_redefinition
см. аналогичный вопрос по asktom http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686