1.8 バージョン対応表と関連するDDL操作
バージョン対応表に対してデータ定義言語(DDL)操作を実行するには、DDL操作の前後に特別なWorkspace Managerプロシージャを使用し、Workspace Managerによって作成される特別な表の名前を指定する必要があります。
表または表を参照する索引またはトリガーに対して、通常の方法でDDL操作を実行することはできません。たとえば、EMPLOYEESという名前のバージョン対応表に列を追加すると、ALTER TABLE EMPLOYEES ADD (column-name data-type)形式の文は入力できません。
これらの要件は、Workspace Managerのバージョニング・メタデータを更新して、DDL変更が反映されるようにするためのものです。そのため、バージョン対応表に影響するDDL操作の前にBeginDDLプロシージャをコールし、DDL操作の後にCommitDDLまたはRollbackDDLプロシージャをコールする必要があります。BeginDDLプロシージャは、<table-name>_LTS (Sはスケルトンを表す)形式の名前で空の一時表を作成します。実際のDDL文は、一時表<table-name>_LTSを指定する必要があり、<table-name>または<table-name>_LT 名は指定できません。The CommitDDLおよびRollbackDDLプロシージャを使用して、一時表<table-name>_LTSを削除します。
ノート:
有効期間のサポートを既存のバージョン対応表に追加する場合は、この手順の例外となります。有効期間のサポートを追加するには、「既存の表に対する有効期間サポートの追加」の説明に従ってAlterVersionedTableプロシージャを使用してください。
バージョン対応表と関連する次のDDL操作がサポートされています。
-
表に対する操作: 次の表プロパティの変更:
logging、pctfree、pctusedinitrans、next、minextents、maxextents、pctincrease、freelistsおよびbuffer_pool、表でのサプリメンタル・ロギングの追加および削除、表の圧縮オプションの変更 -
列に対する操作:
ADD、DROP、MODIFY(ただし、MODIFYでサポートされる操作は、列のデフォルト値の変更、NULL値のみを含む列のデータ型の変更、データ行が存在しない列のデータ型の変更、VARCHAR2、VARCHAR、CHAR、NCHAR、NVCHARまたはNVCHAR2型の列の長さの変更、NUMBER型の列の精度の変更のみです)、列名の変更。列について変更後の長さ、スケールまたは精度は、その列の既存のデータに対応できる必要があります。
-
索引に対する操作:
CREATE INDEX、DROP INDEX、ALTER INDEX(ただし、ALTER INDEXでサポートされているオプションは、logging、pctfree、initrans、initialextent、minextents、nextextent、maxextents、pctincrease、freelists、freelist groupsおよびbuffer_poolのみです)バージョン対応表の索引名が26文字を超える場合に索引名を変更するには、AlterVersionedTableプロシージャを使用する必要があります。RENAME句を指定したALTER INDEX文は使用できません。バージョン対応表の索引名が26文字以下の場合に索引名を変更するには、AlterVersionedTableプロシージャを使用する方法と、BeginDDLプロシージャとCommitDDLプロシージャのコールの間にRENAME句を指定したALTER INDEX文を使用する方法があります。詳細は、「AlterVersionedTable」の「使用上のノート」を参照してください。
-
トリガーに対する操作:
CREATE TRIGGER、DROP TRIGGER、ALTER TRIGGER ENABLE/DISABLE。 -
参照整合性制約に対する操作: 参照整合性制約の追加、削除、使用可能化、使用禁止。Workspace Managerの参照整合性のサポートの詳細は、「参照整合性のサポート」を参照してください。
-
一意制約に対する操作: 一意制約の追加、削除、使用可能化、使用禁止。Workspace Managerの一意制約のサポートの詳細は、「一意制約」を参照してください。
-
権限に関する操作: ユーザーへの表レベル権限の付与、およびユーザーからの権限の取消し。
バージョン対応表では、標準、ビットマップ、ファンクション標準、ファンクション・ビットマップ、不可視、逆およびドメインの索引を作成できます。バージョン対応表ではパーティション索引または結合索引は作成または削除できません。(ただし、パーティション索引または結合索引を持つ表をバージョン対応にすることはできます。) 索引のDDL操作では、compressパラメータおよびprefix_lengthパラメータを使用できます。
どのDDL操作でも、不可視列はサポートされていません。
DDLセッションでID列が表に追加される場合、LIMIT VALUEキーワードはサポートされません。そのキーワードが指定されている場合、開始値は、skeleton _LTS表の開始値に基づいてリセットされます。
サポートされていないDDL操作を実行すると、変更は行われず、CommitDDLプロシージャによって例外が発生する場合があります。
ドメイン索引に対して、バージョン対応表が関連するDDL操作を実行する場合(たとえば、表にRツリー索引を作成する場合)は、CREATE TABLE権限が必要です。
Oracle Label Security(OLS)環境でバージョン対応表に対してDDL操作を実行する必要がある場合は、スケルトン(_LTS)表でSA_POLICY_ADMINパッケージのapply_table_policy、remove_table_policy、enable_table_policyおよびdisable_table_policyプロシージャを使用することができ、変更は、バージョン対応表に転送されます。
次の例に、COLA_MARKETING_BUDGET_LTSという名前の特別な表を使用して、COMMENTS列をCOLA_MARKETING_BUDGET表に追加する場合に必要な文を示します。この例には、列の追加を示すDESCRIBE文も含まれています。
例1-2 バージョン対応表のDDL操作
EXECUTE DBMS_WM.BeginDDL('COLA_MARKETING_BUDGET');
ALTER TABLE cola_marketing_budget_lts ADD (comments VARCHAR2(100));
DESCRIBE cola_marketing_budget_lts;
Name Null? Type
----------------------------------------- -------- ----------------------------
PRODUCT_ID NOT NULL NUMBER
PRODUCT_NAME VARCHAR2(32)
MANAGER VARCHAR2(32)
BUDGET NUMBER
COMMENTS VARCHAR2(100)
EXECUTE DBMS_WM.CommitDDL('COLA_MARKETING_BUDGET');
前述の例のALTER TABLE文には、BeginDDLプロシージャによって作成されるCOLA_MARKETING_BUDGET_LTS表が指定されています。CommitDDLプロシージャによって、COLA_MARKETING_BUDGET表に変更が適用され、COLA_MARKETING_BUDGET_LTS表が削除されます。
親トピック: Workspace Managerの概要