3

私は を持ってOBJECT_TYPEATTRIBUTE varchar2(200)ます。これを参照する他の多くのオブジェクトがあります。属性の長さを に減らす必要がありますvarchar2(50)。直接できないことはわかっているので、次の方法を見つけました。

ALTER TYPE CUSTOMER DROP ATTRIBUTE name INVALIDATE;
ALTER TYPE CUSTOMER ADD ATTRIBUTE name varchar2(50) CASCADE;

問題は、属性の削除/作成後に壊れる可能性のあるものはありますか? ステートメントINVALIDATEの代わりにオプションCASCADEを使用するのは正しいですか? DROP関係やデータなど、何も失いたくありません。

4

1 に答える 1

0

以下が使用されない理由はありますか?

ALTER TYPE CUSTOMER MODIFY ATTRIBUTE name VARCHAR2(50);

タイプを使用して属性を削除すると、特にそのタイプを使用して定義されたテーブルとデータがある場合に、互換性の問題が発生しました。これが、データ型に基づくテーブルとビューを避ける理由の 1 つです。長さを変更すると、関連するデータが 50 を超えるテーブルと行が無効になります。他のオブジェクトが単なる型であり、ビューやテーブルで使用されていない場合、上記の型の変更は正常に機能するはずです。また、任意の型を再コンパイルする必要がある場合があります。タイプがより制限的になり、関連するデータにどのように影響するかを覚えておいてください。

于 2013-02-24T18:01:37.210 に答える