ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

ALTER TYPE文

ALTER TYPE文は、メンバー属性またはメソッドを追加または削除します。 オブジェクト型の既存のプロパティ(FINALまたはINSTANTIABLE)を変更し、型のスカラー属性を変更できます。

この文を使用すると、新しいオブジェクト・メンバーのサブプログラム仕様を追加することによって、型の仕様部または本体を再コンパイルしたり、オブジェクト型の仕様を変更することもできます。

前提条件

オブジェクト型が自身のスキーマ内にあり、CREATE TYPEまたはCREATE ANY TYPEシステム権限を所有しているか、またはALTER ANY TYPEシステム権限を所有している必要があります。

構文

alter_type::=

alter_type
alter_type.gifの説明

compile_type_clause ::=replace_type_clause ::=alter_method_spec ::=alter_attribute_definition::=alter_collection_clauses::=dependent_handling_clause ::=

compile_type_clause ::=

compile_type_clause
compile_type_clause.gifの説明

compiler_parameters_clause::=

compiler_parameters_clause
compiler_parameters_clause.gifの説明

replace_type_clause ::=

replace_type_clause
replace_type_clause.gifの説明

invoker_rights_clause::=

invoker_rights_clause
invoker_rights_clause.gifの説明

element_spec ::=

element_spec
element_spec.gifの説明

inheritance_clauses::=subprogram_spec::=constructor_spec::=map_order_function_spec::=pragma_clause ::=

inheritance_clauses::=

inheritance_clauses
inheritance_clauses.gifの説明

subprogram_spec::=

subprogram_spec
subprogram_spec.gifの説明

procedure_spec::=function_spec::=

procedure_spec::=

procedure_spec
procedure_spec.gifの説明

function_spec::=

function_spec
function_spec.gifの説明

constructor_spec::=

constructor_spec
constructor_spec.gifの説明

map_order_function_spec::=

map_order_function_spec
map_order_function_spec.gifの説明

function_spec::=)

pragma_clause ::=

pragma_clause
pragma_clause.gifの説明

alter_method_spec ::=

alter_method_spec
alter_method_spec.gifの説明

map_order_function_spec::=subprogram_spec::=

alter_attribute_definition::=

alter_attribute_definition
alter_attribute_definition.gifの説明

alter_collection_clauses::=

alter_collection_clauses
alter_collection_clauses.gifの説明

dependent_handling_clause ::=

dependent_handling_clause
dependent_handling_clause.gifの説明

exceptions_clause::=

exceptions_clause
exceptions_clause.gifの説明

キーワードとパラメータの説明

schema

型が含まれているスキーマを指定します。 schemaを省略すると、型は現行のスキーマ内に存在するとみなされます。

type

オブジェクト型、ネストした表型またはVARRAY型の名前を指定します。

compile_type_clause

COMPILEを指定すると、オブジェクト型の仕様部および本体をコンパイルすることができます。 SPECIFICATIONおよびBODYがいずれも指定されていない場合は、これがデフォルトです。

再コンパイル中、コンパイラの永続的なスイッチ設定はすべて削除され、セッションから再度取得されてコンパイルの最後に格納されます。 この処理を回避するには、REUSE SETTINGS句を指定します。

型の再コンパイル時にコンパイル・エラーが発生した場合は、データベースによってエラーが戻され、型は無効なままになります。 関連付けられているコンパイラ・エラー・メッセージは、SQL*PlusコマンドSHOW ERRORSを使用して確認できます。

DEBUG

DEBUGを指定すると、PL/SQLデバッガで使用するためのコードを生成して格納するようにPL/SQLコンパイラに指示できます。 この句を指定した場合の効果は、compiler_parameters_clausePLSQL_DEBUG = TRUEを指定した場合と同じです。

SPECIFICATION

SPECIFICATIONを指定すると、オブジェクト型の仕様部のみをコンパイルすることができます。

BODY

BODYを指定すると、オブジェクト型の本体のみをコンパイルすることができます。

compiler_parameters_clause

この句の型に対する動作は、ファンクションに対する動作と同様です。 詳細は、「ALTER FUNCTION」の「compiler_parameters_clause」を参照してください。

REUSE SETTINGS

この句の型に対する動作は、ファンクションに対する動作と同様です。 詳細は、「ALTER FUNCTION」「REUSE SETTINGS」を参照してください。

replace_type_clause

REPLACE句を使用すると、新しいメンバー・サブプログラム仕様部を追加できます。 この句は、オブジェクト型に対してのみ有効であり、ネストした表またはVARRAYに対しては無効です。

attribute

オブジェクト属性名を指定します。 属性は、オブジェクトの構造を形成する、名前および型指定子を持つデータ項目です。

element_spec

再定義されたオブジェクトの要素を指定します。

inheritance_clauses inheritance_clausesのセマンティクスは、CREATE TYPEおよびALTER TYPE文のセマンティクスと同じです。

subprogram_spec MEMBERおよびSTATIC句を使用すると、属性として参照されるファンクションまたはプロシージャ・サブプログラムをオブジェクト型に対して指定できます。

プロシージャの仕様部またはファンクションの仕様部ごとに、対応するメソッド本体をオブジェクト型本体に指定する必要があります。


参照:


procedure_spec プロシージャ・サブプログラムの仕様部を入力します。

function_spec ファンクション・サブプログラムの仕様部を入力します。

pragma_clause  pragma_clauseは、データベース表またはパッケージ変数(あるいはその両方)に対するメンバー・ファンクションの読取り/書込みアクセスを拒否することによって、副作用の発生の防止に役立つコンパイラ・ディレクティブです。


注意:

この句は非推奨となっています。 アプリケーションの下位互換性を保つ必要がないかぎり、この句は使用しないことをお薦めします。現在は、データベースによって実行時に純正度チェックが実行されます。 アプリケーションの下位互換性を保つためにこの句を使用する必要がある場合は、「CREATE TYPE文」のこの句に関する項を参照してください。

プラグマの制限 pragma_clauseは、メソッドの削除には無効になります。


参照:

プラグマの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

map_order_function_spec 宣言するMEMBERまたはSTATICメソッドの数に関係なく、1つのMAPメソッドまたは1つのORDERメソッドを宣言できます。 ただし、スーパータイプでNOT FINAL MAPメソッドを定義する場合は、サブタイプでMAPメソッドをオーバーライドできます。 いずれかのメソッドを宣言すると、SQLでオブジェクト・インスタンスを比較できます。

いずれのメソッドも宣言しない場合、オブジェクト・インスタンスに関して比較できるのは等しいか等しくないかについてのみです。 同じ型定義のインスタンスは、それぞれの対応する属性の各ペアが等しい場合にのみ等しくなります。 2つのオブジェクト型が等しいかどうかを判断するために、比較メソッドを指定する必要はありません。

invoker_rights_clause

メンバー・ファンクションのAUTHIDプロパティおよびオブジェクト型のプロシージャを指定します。 AUTHIDプロパティの詳細は、「実行者権限または定義者権限の使用(AUTHID句)」を参照してください。

実行者権限の制限 この句は、オブジェクト型にのみ指定でき、ネストした表またはVARRAYには指定できません。

AUTHID CURRENT_USER句 CURRENT_USERを指定を指定すると、オブジェクト型のメンバー・ファンクションおよびプロシージャをCURRENT_USERの権限で実行できます。 この句は実行者権限型を作成します。

型を実行者権限ステータスで作成した場合にそのステータスを維持するには、この句を指定する必要があります。 そうしないと、ステータスが定義者権限に戻ります。

また、この句は、問合せ、DML操作および動的SQL文の外部名がCURRENT_USERのスキーマで解決されるように指定します。 その他すべての文に含まれる外部名は、この型が存在するスキーマで解決されます。

AUTHID DEFINER句 ファンクションおよびプロシージャが存在するスキーマの所有者の権限でオブジェクト型のメンバー・ファンクションおよびプロシージャを実行し、メンバー・ファンクションおよびプロシージャが存在するスキーマで外部名を解決するには、DEFINERを指定します。 これはデフォルトです。

alter_method_spec

alter_method_specを使用すると、typeのメソッドを追加または削除できます。その型に依存するすべてのファンクション索引がデータベースによって無効にされます。

1つのALTER TYPE文で複数のメソッドを追加または削除できますが、各メソッドを参照できるのは1回のみです。

ADD メソッドを追加する場合は、その名前が型階層内の既存の属性と競合しないようにする必要があります。

DROP メソッドを削除すると、そのメソッドがターゲット型から削除されます。

メソッドの削除の制限 スーパータイプから継承されたメソッドをサブタイプから削除することはできません。 かわりに、メソッドをスーパータイプから削除する必要があります。

subprogram_spec MEMBERおよびSTATIC句を使用すると、オブジェクト型に対してプロシージャ・サブプログラムの追加または削除を行うことができます。

サブプログラムの制限 スーパータイプでMEMBERメソッドを再定義するSTATICメソッドをサブタイプに定義することはできません。逆の場合も同じです。

map_order_function_spec MAPまたはORDERメソッドを宣言すると、SQLでオブジェクト・インスタンスを比較できます。

MAPおよびORDERメソッドの制限 サブタイプにORDERメソッドを追加することはできません。

alter_attribute_definition

alter_attribute_definition句を使用すると、オブジェクト型の属性の追加、削除または変更を行うことができます。 1つのALTER TYPE文で複数のメンバー属性またはメソッドを追加、削除または変更できますが、各属性またはメソッドを参照できるのは1回のみです。

ADD ATTRIBUTE 新しい属性の名前は、型階層内の既存の属性またはメソッドと競合しないようにする必要があります。新しい属性は、データベースによって、ローカルに定義された属性リストの最後に追加されます。

属性をスーパータイプに追加すると、すべてのサブタイプに継承されます。 サブタイプでは、継承された属性は宣言された属性より常に優先されます。 そのため、属性をスーパータイプに追加した後で、暗黙的に変更されたサブタイプのマッピングの更新が必要な場合があります。

DROP ATTRIBUTE 属性を型から削除すると、削除した属性に対応する列に加えて、削除した属性を参照している索引、統計および制約も削除されます。

削除する属性のデータ型を指定する必要はありません。

型属性の削除の制限 型属性の削除には、次の制限があります。

MODIFY ATTRIBUTE この句を使用すると、既存のスカラー属性のデータ型を変更できます。 たとえば、VARCHAR2またはRAW属性の長さを増やしたり、数値属性の精度または位取りを増やすことができます。

属性の変更の制限 ファンクション索引、ドメイン索引またはクラスタ・キーで参照されている属性のサイズを拡張することはできません。

[NOT] FINAL

この句を使用すると、この型のサブタイプをさらに作成できるようにするかどうかを指定できます。

プロパティをFINALNOT FINALの間で変更する場合は、dependent_handling_clauseCASCADE句を指定して、依存する列および表のデータを変換する必要があります。

FINALの制限 ユーザー定義型にサブタイプがある場合、そのユーザー定義型をNOT FINALからFINALに変更することはできません。

[NOT] INSTANTIABLE

この句を使用すると、この型のオブジェクト・インスタンスを構成できるかどうかを指定できます。

NOT INSTANTIABLEの制限 ユーザー定義型に表の依存関係がある場合、そのユーザー定義型をINSTANTIABLEからNOT INSTANTIABLEに変更することはできません。

alter_collection_clauses

この句は、コレクション型に対してのみ有効です。

MODIFY LIMIT integer この句を使用すると、VARRAYの要素の数を増やすことができます。 この句は、ネストした表に対しては無効です。 VARRAYの要素の現在の最大数より大きい整数を指定します。

ELEMENT TYPE datatype この句を使用すると、VARRAYまたはネストした表のスカラー・データ型の精度、サイズまたは長さを増やすことができます。 この句は、オブジェクト型のコレクションに対しては無効です。

dependent_handling_clause

dependent_handling_clauseを使用すると、変更された型に依存するオブジェクトの処理方法をデータベースに指示できます。 この句を省略すると、typeに依存する型または表がある場合にALTER TYPE文が終了します。

INVALIDATE句

INVALIDATEを指定すると、チェック・メカニズムを使用しないですべての依存オブジェクトを無効にできます。


注意:

データベースによって型の変更は検証されないため、この句の使用には注意が必要です。 たとえば、パーティション化キーまたはクラスタ・キーである属性を削除すると、表に書き込むことができなくなります。

CASCADE句

CASCADE句を指定すると、型の変更を依存する型および表に伝播することができます。FORCEも指定しないかぎり、依存する型または表でエラーが検出された場合は文が終了します。

型のプロパティをFINALNOT FINALの間で変更する場合は、この句を指定して、依存する列および表のデータを変換する必要があります。 詳細は、「[NOT] FINAL」を参照してください。

INCLUDING TABLE DATA INCLUDING TABLE DATAを指定すると、すべてのユーザー定義列に格納されているデータを最新バージョンの列型に変換できます。 これはデフォルトです。


注意:

列データがOracle Databaseバージョン8.0のイメージ・フォーマットの場合は、この句を指定する必要があります。 この句は、型のプロパティをFINALNOT FINALの間で変更する場合も必須です。

INCLUDING TABLE DATAを指定する場合は、表データを含むすべての表領域が読取り/書込みモードである必要があります。

NOT INCLUDING TABLE DATAを指定すると、データベースによって列のメタデータがアップグレードされ、その型に対する変更が反映されますが、このALTER TYPE文の一部として依存する列はスキャンされず、データは更新されません。 ただし、依存する列データはアクセス可能なままであり、後続のデータの問合せ結果には型の変更が反映されます。


参照:

型属性の変更時に表データを含めない場合の影響の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

CONVERT TO SUBSTITUTABLE FINALからNOT FINALへの型の変更、その型の置換可能な表と列の新規作成、および既存の依存する表と列への変更した型の新しいサブタイプ・インスタンスの格納も行う場合は、この句を指定します。 詳細は、「[NOT] FINAL」を参照してください。

exceptions_clause 依存する表および索引からのエラーを無視し、指定した例外表にすべてのエラーを記録する場合は、FORCEを指定します。 DBMS_UTILITY.CREATE_ALTER_TYPE_ERROR_TABLEプロシージャを実行して、例外表がすでに作成されている必要があります。

メンバー・ファンクションの追加: 例 次の例では、data_typ1オブジェクト型を使用します。 このオブジェクト型を作成する例については、「オブジェクト型の例」を参照してください。 メソッドがdata_typ1に追加され、その型本体がそれに対応するように変更されます。 日付書式は、oe.ordersサンプル表のorder_date列と一致しています。

ALTER TYPE data_typ1
   ADD MEMBER FUNCTION qtr(der_qtr DATE)
   RETURN CHAR CASCADE;

CREATE OR REPLACE TYPE BODY data_typ1 IS
  MEMBER FUNCTION prod (invent NUMBER) RETURN NUMBER IS 
  BEGIN 
  RETURN (year + invent); 
  END; 
     MEMBER FUNCTION qtr(der_qtr DATE) RETURN CHAR IS 
     BEGIN 
       IF (der_qtr < TO_DATE('01-APR', 'DD-MON')) THEN 
         RETURN 'FIRST'; 
       ELSIF (der_qtr < TO_DATE('01-JUL', 'DD-MON')) THEN 
         RETURN 'SECOND'; 
       ELSIF (der_qtr < TO_DATE('01-OCT', 'DD-MON')) THEN 
         RETURN 'THIRD'; 
       ELSE 
         RETURN 'FOURTH'; 
       END IF; 
     END; 
   END;
/

コレクション属性の追加: 例 次の例では、author属性をtext表のtextdoc_tabオブジェクト列に追加します。 基礎となるtextdoc_typ型を作成する例については、「オブジェクト型の例」を参照してください。

CREATE TABLE text (
   doc_id       NUMBER,
   description  textdoc_tab)
   NESTED TABLE description STORE AS text_store;

ALTER TYPE textdoc_typ
   ADD ATTRIBUTE (author VARCHAR2) CASCADE;

textdoc_tab表とtext表の両方がtextdoc_typ型に依存しているため、CASCADEキーワードは必須です。

コレクション型の要素の数の増加: 例 次の例では、VARRAY phone_list_typ_demoの要素の最大数を増やします。 この型を作成する例については、「オブジェクト型の例」を参照してください。

ALTER TYPE phone_list_typ_demo
  MODIFY LIMIT 10 CASCADE;

コレクション型の長さの増加: 例 次の例では、VARRAY要素型phone_list_typの長さを増やします。

ALTER TYPE phone_list_typ
  MODIFY ELEMENT TYPE VARCHAR(64) CASCADE;

型の再コンパイル: 例 次の例では、hrスキーマのcust_address_typ型を再コンパイルします。

ALTER TYPE cust_address_typ2 COMPILE;

型仕様部の再コンパイル: 例 次の例では、link2の型仕様をコンパイルします。

CREATE TYPE link1 AS OBJECT
  (a NUMBER);
/
CREATE TYPE link2 AS OBJECT
  (a NUMBER,
   b link1,
   MEMBER FUNCTION p(c1 NUMBER) RETURN NUMBER);
/
CREATE TYPE BODY link2 AS
   MEMBER FUNCTION p(c1 NUMBER) RETURN NUMBER IS 
      BEGIN  
         dbms_output.put_line(c1);
         RETURN c1; 
      END; 
   END;
/

次の例では、link2の属性であるlink1が変更されるため、link2の仕様部と本体の両方が無効になります。

ALTER TYPE link1 ADD ATTRIBUTE (b NUMBER) INVALIDATE;

仕様部と本体を別々の文で再コンパイルすることによって、型を再コンパイルする必要があります。

ALTER TYPE link2 COMPILE SPECIFICATION;

ALTER TYPE link2 COMPILE BODY;

また、仕様部と本体を同時にコンパイルすることもできます。

ALTER TYPE link2 COMPILE;

関連トピック