【问题标题】:Oracle: Changing VARCHAR2 column to CLOBOracle:将 VARCHAR2 列更改为 CLOB
【发布时间】:2012-11-04 08:20:09
【问题描述】:

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

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

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

    ALTER TABLE table MODIFY column CLOB
    

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

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

【问题讨论】:

  • 确保在删除列之前提交。否则不会提交复制操作,您将丢失所有数据。

标签: oracle database


【解决方案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 正在尝试的吗?
    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2023-03-12
    • 2023-01-05
    • 2012-10-03
    • 1970-01-01
    • 2013-12-08
    • 2019-09-23
    • 2016-11-06
    相关资源
    最近更新 更多