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

Wht*_*sop 28 sql oracle oracle10g

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

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

Kev*_*ton 72

(如上一个答案)和这里的代码:

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;
Run Code Online (Sandbox Code Playgroud)

  • +1如果我们在单个会话中执行此操作,则COMMIT是不必要的,因为后续的ALTER TABLE语句会发出隐式提交(实际上是两个). (7认同)
  • 抱歉,我只是在回答这个问题,我想如果你在表格中使用select*那么列顺序很重要,但我首先会质疑这种方法的完整性. (2认同)

Ren*_*ene 11

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


Sus*_*tta 11

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

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;
Run Code Online (Sandbox Code Playgroud)

即使在更改数据类型之后,这也是保持列的数据和位置完整的方式.有关详细信息,请参见此处:http://www.oraclebin.com/2012/12/how-to-change-varchar2-to-clob-datatype.html