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
エラーメッセージに記載されているテーブル名を使用して、データベースで次のSQLクエリを実行します。たとえば、この記事に示されているエラーメッセージでは、テーブル名は「tablename」です。エラーメッセージではテーブル名は小文字で表示されますが、DBでは大文字である可能性があることに注意してください。このクエリでは大文字と小文字が区別されるため、結果が得られない場合は、データベース内でテーブル名が大文字であるかどうかを確認してください。
SELECT COLUMN_NAME、DATA_DEFAULT、HIDDEN_COLUMN FROM USER_TAB_COLS WHERE TABLE_NAME = 'tablename';
続行する前に、BitbucketServerプロセスが実行されていないことを確認してください。拡張統計が有効になっている場合は、データベース管理者に連絡して、拡張統計メタデータをテーブルから削除してもらい、アップグレードを続行してください。アップグレード後に拡張統計を再度有効にしたい場合は、有効にすることができますが、後続のアップグレードのためにこのプロセスを再度繰り返す必要がある場合があることに注意してください。
Extended Statisticsによって作成された列を削除するには、組み込みのストアドプロシージャを使用する必要があります。
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")')
ありがとう。
ALTER TABLE列の名前をに変更します
仮想列または「グループ拡張列」のあるテーブルの場合、上記のステートメントはOracle12cR2の前にエラーを返します。 Oracle 12cR2以降のバージョンでは、上記のステートメントは正常に実行されます。「列の名前変更」コマンドは、グループ拡張の側面から切り離されています。
おそらく、あなたはそのようなテーブルを持っています:
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
列は、virtual(zl_divn_percent
)列の計算に使用されます。
zl_divn_nbr
の名前を変更するには、この列に対して参照されているすべての仮想列を削除する必要があり、後で作成することができます。
仮想列を定義するための構文は次のとおりです。
column_name [datatype] [GENERATED ALWAYS] AS (expression) [VIRTUAL]
バージョン11R1以降、このプロパティがあります。