Oracle:将VARCHAR2列更改为CLOB

时间:2012-11-15 17:01:06

标签: oracle database

我遇到了一个问题,我试图在varchar2(4000)列中存储的数据太大,所以我希望将列更改为更适合存储大量文本数据的列。具体来说,是一个序列化数组。

  1. 首先,CLOB是我用于此目的的最佳数据类型吗?是否有更合适的数据类型?

  2. 其次,当我尝试使用通常的snyntax改变列时:

    ALTER TABLE table MODIFY column CLOB
    

    我收到以下错误: ORA-22858:数据类型无效更改

    在不丢失任何数据的情况下更改此表的最简单方法是什么?

3 个答案:

答案 0 :(得分:46)

最简单的方法是,不允许从varchar列移动到CLOB的操作,创建新列并将数据从旧列移动到新列柱:

ALTER TABLE some_table ADD (foo CLOB);
UPDATE some_table SET foo = old_column;
ALTER TABLE some_table DROP COLUMN old_column;
ALTER TABLE some_table RENAME COLUMN foo TO old_column;

答案 1 :(得分:1)

VARCHAR2列不能直接转换为CLOB,但是可以分两步完成:

  • 将列数据类型从VARCHAR2转换为LONG。
  • 将列数据类型从LONG转换为CLOB。
ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;

答案 2 :(得分:0)

对于Oracle 11g:

ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;