【问题标题】:Oracle Alter command to rename existing Column errorringOracle Alter 命令重命名现有的列错误
【发布时间】:2018-05-10 20:06:02
【问题描述】:
alter table tablename rename column zl_divn_nbr to div_loc_nbr;

执行上述语句时出错。请帮忙。

SQL Error: ORA-54032: column to be renamed is used in a virtual column expression
54032. 0000 -  "column to be renamed is used in a virtual column expression"
*Cause:    Attempted to rename a column that was used in a virtual column
           expression.
*Action:   Drop the virtual column first or change the virtual column
           expression to eliminate dependency on the column to be renamed

【问题讨论】:

    标签: oracle alter identity-column


    【解决方案1】:

    使用错误消息中提到的表名在您的数据库中运行以下 SQL 查询。例如,在本文显示的错误消息中,表名是“tablename”。请注意,虽然表名在错误消息中显示为小写,但在您的数据库中可能为大写。此查询区分大小写,因此如果您没有收到任何结果,请检查数据库中的表名是否为大写。

    选择 COLUMN_NAME、DATA_DEFAULT、HIDDEN_COLUMN FROM USER_TAB_COLS WHERE TABLE_NAME = '表名';

    在继续之前,请确保 Bitbucket 服务器进程未运行。如果已启用扩展统计信息,请联系您的数据库管理员,让他们从表中删除扩展统计信息元数据,然后继续升级。如果您希望在升级后再次启用扩展统计信息,您可以这样做,但请注意,您可能需要再次重复此过程以进行后续升级,否则您可能会再次遇到此问题。

    删除由扩展统计创建的列需要使用内置存储过程,

    DBMS_STATS.DROP_EXTENDED_STATS()。

    ORA-54033 和 Hidden Virtual Column Mystery 进一步介绍了此存储过程的使用,类似于以下内容:

    EXEC DBMS_STATS.DROP_EXTENDED_STATS(ownname=>'<YOUR_DB_USERNAME>', tabname=>'tablename', extension=>'("PR_ROLE", "USER_ID", "PR_APPROVED")')
    

    参考资料 Database Upgrade Eror: column to be rename

    谢谢。

    【讨论】:

      【解决方案2】:

      大概,你有这样一张桌子:

      CREATE TABLE tablename(
        id               NUMBER,
        zl_divn_nbr      NUMBER,
        zl_divn_percent  NUMBER GENERATED ALWAYS AS (ROUND(zl_divn_nbr/100,2)) VIRTUAL
      );
      

      其中zl_divn_nbr 列用于虚拟(zl_divn_percent) 列的计算。

      要重命名zl_divn_nbr,所有引用到该列的虚拟列都应该被删除,并且可以在以后创建。

      定义虚拟列的语法是这样的:

      column_name [datatype] [GENERATED ALWAYS] AS (expression) [VIRTUAL]
      

      从版本 11 R1 开始,我们就有了这个属性。

      【讨论】:

        【解决方案3】:

        ALTER TABLE 将列重命名为

        对于具有虚拟或“组扩展列”的,上述情况 语句在 Oracle 12cR2 之前返回错误。对于 Oracle 12cR2 或更新版本,上述语句运行良好,因为“重命名列”命令与组扩展方面分离。

        【讨论】:

          猜你喜欢
          • 2011-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-31
          • 2023-03-06
          • 1970-01-01
          相关资源
          最近更新 更多