【发布时间】:2023-03-12 12:30:01
【问题描述】:
我在 oracle DB 中有一个列details 设计为 varchar,这个 DB 现在正用于客户,并且一些行已经存储了数据。
现在我想将列 details 更改为 Clob 列。有什么聪明的方法可以做到这一点?
【问题讨论】:
我在 oracle DB 中有一个列details 设计为 varchar,这个 DB 现在正用于客户,并且一些行已经存储了数据。
现在我想将列 details 更改为 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
【讨论】:
UNUSABLE 状态。
如果您需要在此过程中访问您的表数据.. 看看 DBMS_REDEFINITION
在 asktom 上查看类似问题 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686
【讨论】: