45

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

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

  2. 其次,当我尝试使用通常的语法来更改列时:

    ALTER TABLE table MODIFY column CLOB
    

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

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

4

3 回答 3

67

varchar鉴于不允许从列移动到 a 的操作,最直接的方法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;
于 2012-11-15T17:05:19.483 回答
9

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

  • 将列数据类型从 VARCHAR2 转换为 LONG。
  • 将列数据类型从 LONG 转换为 CLOB。
ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;
于 2019-07-22T17:53:02.153 回答
2

对于 Oracle 11g:

ALTER TABLE table MODIFY column long;
ALTER TABLE table MODIFY column clob;
于 2019-07-21T14:55:29.737 回答