Pra*_*nth 8 oracle alter identity-column
alter table tablename rename column zl_divn_nbr to div_loc_nbr;
Run Code Online (Sandbox Code Playgroud)
执行以上语句时出错。请帮忙。
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
Run Code Online (Sandbox Code Playgroud)
使用错误消息中提到的表名称在数据库中运行以下SQL查询。例如,在本文显示的错误消息中,表名是“ tablename”。请注意,虽然表名在错误消息中以小写形式出现,但在您的数据库中可能是大写形式。该查询区分大小写,因此,如果没有收到结果,请检查表名在数据库中是否为大写。
在TABLE_NAME ='tablename'的情况下,从USER_TAB_COLS中选择COLUMN_NAME,DATA_DEFAULT,HIDDEN_COLUMN
在继续之前,请确保Bitbucket Server进程未运行。如果启用了扩展统计信息,请与数据库管理员联系以使他们从表中删除扩展统计信息元数据,然后继续进行升级。如果您希望在升级后再次启用扩展统计信息,则可以这样做,但是请注意,您可能需要再次重复此过程以进行后续升级,否则可能会再次遇到此问题。
删除由扩展统计信息创建的列需要使用内置存储过程,
DBMS_STATS.DROP_EXTENDED_STATS()。
ORA-54033和“隐藏的虚拟列之谜”进一步介绍了此存储过程的用法,其外观类似于以下内容:
EXEC DBMS_STATS.DROP_EXTENDED_STATS(ownname=>'<YOUR_DB_USERNAME>', tabname=>'tablename', extension=>'("PR_ROLE", "USER_ID", "PR_APPROVED")')
Run Code Online (Sandbox Code Playgroud)
谢谢。
也许,你有这样一张表:
CREATE TABLE tablename(
id NUMBER,
zl_divn_nbr NUMBER,
zl_divn_percent NUMBER GENERATED ALWAYS AS (ROUND(zl_divn_nbr/100,2)) VIRTUAL
);
Run Code Online (Sandbox Code Playgroud)
其中zl_divn_nbrcolumn用于计算virtual( zl_divn_percent)列。
要重命名zl_divn_nbr,应删除此列的所有引用虚拟列,并且可以稍后创建。
定义虚拟列的语法是这样的:
column_name [datatype] [GENERATED ALWAYS] AS (expression) [VIRTUAL]
Run Code Online (Sandbox Code Playgroud)
从版本 11 R1 开始,我们就有了这个属性。