Oracle:将 VARCHAR2 列更改为 CLOB
Posted
技术标签:
【中文标题】Oracle:将 VARCHAR2 列更改为 CLOB【英文标题】:Oracle: Changing VARCHAR2 column to CLOB 【发布时间】:2012-11-04 08:20:09 【问题描述】:我遇到了一个问题,即我试图存储在 varchar2(4000) 列中的数据太大,因此我希望将列更改为更适合存储大量文本数据的列。具体来说,一个序列化的数组。
首先,CLOB 是我用于此目的的最佳数据类型吗?有没有更合适的数据类型?
其次,当我尝试使用通常的语法来更改列时:
ALTER TABLE table MODIFY column CLOB
我收到以下错误:ORA-22858:数据类型更改无效
在不丢失任何数据的情况下更改此表的最直接方法是什么?
【问题讨论】:
确保在删除列之前提交。否则不会提交复制操作,您将丢失所有数据。 【参考方案1】:鉴于不允许从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;
【讨论】:
是的。 OP 的语法是正确的,但操作是不允许的。【参考方案2】:VARCHAR2 列不能直接转换为 CLOB,但可以分两步完成:
将列数据类型从 VARCHAR2 转换为 LONG。 将列数据类型从 LONG 转换为 CLOB。ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;
【讨论】:
【参考方案3】:对于 Oracle 11g:
ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;
【讨论】:
这不正是 OP 正在尝试的吗?以上是关于Oracle:将 VARCHAR2 列更改为 CLOB的主要内容,如果未能解决你的问题,请参考以下文章