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的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql中的动态数据透视

oracle sql中的动态数据透视

如何将列更改为行

如何将列更改为行[重复]

将现有 MySQL 列更改为 JSON 数据类型

Oracle SQL 在包含数据时将列类型从数字更改为 varchar2