如何在oracle中将列varchar更改为clob

时间:2011-07-27 04:48:53

标签: sql oracle oracle10g

我在oracle DB中有一个详细信息列设计为varchar,此DB现在正在用于客户,而某些行已经存储了数据。

现在我想将列详细信息更改为Clob列。什么是实现这一目标的聪明方法?

4 个答案:

答案 0 :(得分:63)

(如上一个答案),这是代码:

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;

答案 1 :(得分:11)

  1. 向表中添加clob列
  2. 使用varchar column
  3. 中的值更新clob列
  4. drop varchar column
  5. 将clob列重命名为varchar columns name

答案 2 :(得分:8)

但这不会保持你的专栏的位置。它会将您的列移动到表的末尾。因此,如果您想保持列的位置,请按照以下步骤操作。

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

答案 3 :(得分:1)

如果您需要在此过程中访问您的表数据,请查看 DBMS_REDEFINITION

在asktom上看到类似的问题 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686