Oracle SQL。如何更改表字段数据类型CLOB - > VARCHAR2

时间:2013-12-16 18:01:41

标签: sql oracle

我有数据库,有些文字字段是CLOB类型,我需要将其中的大部分更改为VARCHAR2

尝试使用SQL Developer工具,通过单击表上的编辑,但得到如下错误:

以下SQL语句失败:

ALTER TABLE TBL_PEOPLE   MODIFY (PERSON VARCHAR2(150) )

想问一下,如何做到这一改变

2 个答案:

答案 0 :(得分: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;

显然,在确定数据已复制且没有错误之前,请不要删除旧列。还要考虑旧列中可能存在的任何约束,索引等;他们需要重新创建。引用旧列的任何内容都将失效 - 通常程序将在下次使用时重新编译。

所以要小心,先测试一下,然后计划一些停机时间。

答案 1 :(得分:0)

ALTER TABLE tablename ADD (FIELD_LIST_TEMP VARCHAR2);  
UPDATE tablename SET FIELD_LIST_TEMP = FIELD_LIST;
ALTER TABLE tablename DROP COLUMN FIELD_LIST;
ALTER TABLE tablename RENAME COLUMN FIELD_LIST_TEMP TO FIELD_LIST;

在此将FIELD_LIST现有列定义为CLOB。通过上面的查询,它将从CLOB更改为VARCHAR2。