我有数据库,有些文字字段是CLOB
类型,我需要将其中的大部分更改为VARCHAR2
。
尝试使用SQL Developer工具,通过单击表上的编辑,但得到如下错误:
以下SQL语句失败:
ALTER TABLE TBL_PEOPLE MODIFY (PERSON VARCHAR2(150) )
想问一下,如何做到这一改变
答案 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。