【问题标题】:Problem in converting varchar2 column to clob data type in Oracle databaseOracle数据库中将varchar2列转换为clob数据类型的问题
【发布时间】:2020-06-19 09:35:30
【问题描述】:

我的数据库中有一个 Person 表。我正在使用 Oracle 数据库。我有一列 ADDRESS 具有 varchar2 数据类型。我想将此列的数据类型从 varchar2 更改为 clob。我正在通过 Liquibase 进行此更改。这是我的变更集。

<changeSet id="15" author="shivam">
    <sql>
        ALTER TABLE PERSON ADD ADDRESS_CLOB VARCHAR2(2040 CHAR);
        ALTER TABLE PERSON MODIFY ADDRESS_CLOB LONG;
        ALTER TABLE PERSON MODIFY ADDRESS_CLOB CLOB;
        UPDATE PERSON SET ADDRESS_CLOB = ADDRESS;
        ALTER TABLE PERSON DROP COLUMN ADDRESS;
    </sql>
    <rollback>
        ALTER TABLE PERSON DROP COLUMN ADDRESS_CLOB;
    </rollback>
</changeSet>

通过上述变更集,我将能够从 varchar2 转换为 clob。但正如您所见,我的最后一列名称是 ADDRESS_CLOB。但我的要求是最终列名应该是 ADDRESS 并且应该是 clob 数据类型。我该怎么做,请帮助我。

【问题讨论】:

    标签: oracle liquibase liquibase-hibernate liquibase-sql liquibase-pro


    【解决方案1】:

    您只需将列重命名为:

    alter table person rename column address_clob to address;
    

    注意Oracle Database DDL is not transactional like in other databases.

    【讨论】:

    • 如果我将你的命令写在变更集中,那么会有几个问题。您还需要注意此命令是否会失败,那么您将如何回滚。
    • 请详细说明问题:数据库问题?哪些错误信息? Liquibase 问题?如果您已经对此进行了测试并且失败了,请使用相关输出编辑您的问题。
    • 你能具体告诉我你不明白的地方吗?
    • 如果您不详细说明“问题”,这里没有人能真正帮助您。
    • 没有什么可以显式回滚:在 Oracle 中,所有 DDL 命令都在它们自己的事务中运行:如果 ALTER 语句失败,它将被 Oracle 自动回滚。
    猜你喜欢
    • 2016-03-10
    • 2017-05-22
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2019-01-22
    • 2018-07-11
    相关资源
    最近更新 更多