プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CREATE VIEW

用途

CREATE VIEW文を使用すると、ビューを定義できます。ビューとは、1つ以上の表またはビューをベースとした論理表です。ビュー自体にはデータは含まれていません。ビューのベースとなる表は、実表と呼ばれます。

LOB、オブジェクト型、REFデータ型、ネストした表またはVARRAY型をサポートするオブジェクト・ビューまたはリレーショナル・ビューを、既存のビュー・メカニズムで作成することもできます。オブジェクト・ビューとは、ユーザー定義型のビューのことで、ビューの各行に、それぞれが一意のオブジェクト識別子を持つオブジェクトが含まれます。

XMLTypeビューも作成できます。このビューは、オブジェクト・ビューと似ていますが、XMLTypeのXMLスキーマベースの表のデータを表示します。


関連項目:

  • 様々な種類のビューおよびその使用方法については、『Oracle Database概要』『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』および『Oracle Database管理者ガイド』を参照してください。

  • XMLTypeビューの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

  • ビューの変更およびデータベースからのビューの削除については、「ALTER VIEW」および「DROP VIEW」を参照してください。


前提条件

自分のスキーマ内にビューを作成する場合は、CREATE VIEWシステム権限が必要です。他のユーザーのスキーマ内にビューを作成する場合は、CREATE ANY VIEWシステム権限が必要です。

サブビューを作成する場合は、UNDER ANY VIEWシステム権限またはスーパービューに対するUNDERオブジェクト権限が必要です。

ビューが含まれているスキーマの所有者は、そのビューの基礎となっているすべての表またはビューに対する行の選択、挿入、更新または削除の権限が必要です。また、所有者には、これらの権限がロールを介してではなく、直接付与されている必要があります。

オブジェクト・ビューの作成時にオブジェクト型の基本コンストラクタ・メソッドを使用する場合、次のいずれかの条件を満たしている必要があります。

  • オブジェクト型が作成対象のビューと同じスキーマに属している。

  • EXECUTE ANY TYPEシステム権限を持っている。

  • そのオブジェクト型に対するEXECUTEオブジェクト権限を持っている。


関連項目:

作成するビューの基礎となる表またはビューに対して、ビューの所有者に必要な権限の詳細は、「SELECT」「INSERT」「UPDATE」および「DELETE」を参照してください。

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のビューを再作成できます。この句を使用した場合、以前に付与されたオブジェクト権限を削除、再作成、再付与しなくても、既存のビュー定義を変更できます。

従来型のビューを再作成した場合、そのビューで定義されたINSTEAD OFトリガーは削除されます。エディショニング・ビューを再作成した場合、エディショニング・ビューで定義されたDMLトリガーは保持されます。ただし、エディショニング・ビューの変更によってコンパイルできない場合(たとえば、トリガー定義で参照されるエディショニング・ビュー列を削除した場合など)は、これらのトリガーを永続的に無効にできます。

すべてのマテリアライズド・ビューがviewに依存している場合、そのマテリアライズド・ビューにはUNUSABLEというマークが付けられ、それらが再利用可能になるようにリストアする場合は、完全なリフレッシュが必要になります。無効なマテリアライズド・ビューはクエリー・リライトで使用されることはなく、また、再コンパイルされるまでリフレッシュされません。

従来型のビューからエディショニング・ビューに、またはエディショニング・ビューから従来型のビューに置き換えることはできません。エディショニング・ビューの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。


関連項目:

  • 無効なマテリアライズド・ビューのリフレッシュについては、「ALTER MATERIALIZED VIEW」を参照してください。

  • マテリアライズド・ビューの概要は、『Oracle Database概要』を参照してください。

  • INSTEAD OF句の詳細は、「CREATE TRIGGER」を参照してください。


FORCE

FORCEを指定すると、ビューの実表または参照するオブジェクト型が存在しているか、またはそのビューを含むスキーマの所有者が、それらの表やオブジェクト型に対する権限を持っているかにかかわらず、ビューを作成できます。SELECTINSERTUPDATEまたはDELETE文をビューに対して発行する場合、これらの条件を満たしている必要があります。

ビュー定義が制約を含む場合、実表または参照するオブジェクト型が存在しないと、CREATE VIEW ... FORCEは正常に実行されません。また、ビュー定義で存在しない制約が指定される場合も、CREATE VIEW ... FORCEは正常に実行されません。

NO FORCE

NOFORCEを指定すると、実表が存在し、ビューを含むスキーマの所有者がその実表に対する権限を持っている場合のみ、ビューを作成できます。これはデフォルトです。

EDITIONING

この句を使用すると、エディショニング・ビューを作成できます。エディショニング・ビューは単一表ビューであり、実表からすべての行を選択し、実表の列のサブセットを表示します。エディショニング・ビューを使用すると、アップグレードなどの管理操作時に、アプリケーションに影響を与えることなく実表に対するDDL変更を実行できます。実表に対する既存のエディショニング・ビューの関係について、情報を取得する場合は、USER_ALL_およびDBA_EDITIONING_VIEWデータ・ディクショナリ・ビューを問い合せます。

エディショニング・ビューの所有者は、エディション化が可能である必要があります。詳細は、「ENABLE EDITIONS」を参照してください。

エディショニング・ビューの注意事項: エディショニング・ビューと従来型のビューは、次の点で大きく異なります。

  • エディショニング・ビューは、表の列のサブセットの別名を選択して表示するためにのみ使用されます。そのため、エディショニング・ビューを作成する構文には、従来型のビューを作成する構文よりも多くの制限事項があります。制限事項(内容については後述)に違反すると、FORCEを指定しても、ビューを作成できません。

  • エディショニング・ビューには、DMLトリガーを作成できます。この場合、データベースは、エディショニング・ビューをこのトリガーに対する基本オブジェクトとみなします。このようなトリガーは、DML操作がエディショニング・ビューそのものを対象とした場合に起動します。DML操作が実表を対象とした場合には起動しません。

  • エディショニング・ビューには、INSTEAD OFトリガーを作成できません。

エディショニング・ビューの制限事項: エディショニング・ビューには、次の制限事項があります。

  • どのエディション内でも、公開されているかどうかに関係なく、単一表に対して作成できるエディショニング・ビューは1つのみです。

  • object_view_clauseまたはXMLType_view_clauseは指定できません。

  • エディショニング・ビューには、WITH CHECK OPTION制約を定義できません。

  • 定義する副問合せのSELECT構文のリストには、実表の列に対する単純な参照のみを指定できます。また、実表の各列を1回にかぎりSELECT構文のリストに指定できます。ワイルド・カード記号であるアスタリスク*およびt_alias.*は、実表のすべての列を指定する場合に使用できます。

  • ビューを定義する副問合せのFROM句で参照できるのは、既存の1つのデータベース表のみです。結合は使用できません。実表は作成対象のビューと同じスキーマに属している必要があります。表の識別にシノニムは使用できません。ただし、表の別名を指定することはできます。

  • 副問合せを定義する次の句は、エディショニング・ビューには無効です。subquery_factoring_clauseDISTINCTまたはUNIQUEwhere_clausehierarchical_query_clausegroup_by_clauseHAVING条件、model_clause、または集合演算子(UNIONINTERSECTまたはMINUS)。


関連項目:

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

  • エディションの詳細およびエディショニング・ビューの例は、「CREATE EDITION」を参照してください。


schema

ビューを含めるスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのビューが作成されます。

view

ビューまたはオブジェクト・ビューの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

ビューの制限事項: あるビューにINSTEAD OFトリガーが含まれている場合、そのビューで作成されるビューが更新可能であっても、そのビューにはINSTEAD OFトリガーが必要です。

alias

ビューを定義する問合せによって選択された式の名前を指定します。別名の数は、ビューによって選択された式の数と一致している必要があります。別名は、Oracle Databaseのスキーマ・オブジェクトのネーミング規則に従う必要があります。別名は、ビュー内で一意である必要があります。

別名を省略した場合、別名は問合せの列または列の別名から導出されます。このため、問合せに列の名前のみでなく式が含まれている場合は、別名を使用する必要があります。また、ビュー定義に制約が含まれている場合も、別名を指定する必要があります。

ビューの別名の制限事項: オブジェクト・ビューの作成時に別名は指定できません。

inline_constraintおよびout_of_line_constraint

ビューおよびオブジェクト・ビューには制約を指定できます。out_of_line_constraint句を使用すると、ビュー・レベルで制約を定義できます。適切な別名の後でinline_constraint句を使用すると、列定義または属性定義の一部として制約を定義できます。

Oracle Databaseでは、ビュー制約を適用していません。制限事項を含むビュー制約の詳細は、「ビュー制約」を参照してください。

object_view_clause

object_view_clauseを使用すると、オブジェクト型にビューを定義できます。

OF type_name

この句を使用すると、type_name型のオブジェクト・ビューを明示的に作成できます。オブジェクト・ビューの列は、type_name型の最上位属性に対応しています。各行にはオブジェクト・インスタンスが含まれ、また、各インスタンスはWITH OBJECT IDENTIFIER句で指定したオブジェクト識別子に関連付けられます。schemaを指定しない場合、自分のスキーマ内にオブジェクト・ビューが作成されます。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

WITH OBJECT IDENTIFIER句

WITH OBJECT IDENTIFIER句を使用すると、最上位(ルート)のオブジェクト・ビューを指定できます。オブジェクト・ビュー内の各行を識別するためのキーとして使用されるオブジェクト型の属性を指定します。ほとんどの場合、各属性は実表の主キー列と対応します。属性リストが一意で、ビューの1行ずつを識別することを確認する必要があります。WITH OBJECT IDENTIFIERおよびWITH OBJECT ID句は、区別なしに使用できますが、意味を明確にするために用意されています。

オブジェクト・ビューの制限事項: オブジェクト・ビューには、次の制限事項があります。

  • オブジェクト・ビュー内の複数のインスタンスに変換される主キーREFを参照解除または確保しようとした場合、データベースはエラーを戻します。

  • サブビューはスーパービューのオブジェクト識別子を継承するため、サブビューを作成する場合は、この句を指定できません。


注意:

Oracle8iリリース8.0の構文WITH OBJECT OIDは、この構文と置き換えられます。キーワードWITH OBJECT OIDは下位互換用にサポートされていますが、新しい構文WITH OBJECT IDENTIFIERを使用することをお薦めします。

オブジェクト・ビューがオブジェクト表またはオブジェクト・ビュー上で定義されている場合は、この句を省略するか、またはDEFAULTを指定します。

DEFAULT DEFAULTを指定すると、基礎となるオブジェクト表またはオブジェクト・ビュー固有のオブジェクト識別子を使用して、各行を一意に識別できます。

attribute attributeでは、オブジェクト・ビューに対して作成されるオブジェクト識別子の基になるオブジェクト型の属性を指定します。

UNDER句

UNDER句を使用すると、オブジェクト・スーパービューに基づくサブビューを指定できます。

サブビューの制限事項: サブビューには、次の制限事項があります。

  • サブビューは、スーパービューと同じスキーマに作成する必要があります。

  • オブジェクト型type_nameは、superview直属のサブタイプである必要があります。

  • 同一のスーパービューには、特定の型のサブビューを1つのみ作成できます。


関連項目:

  • オブジェクトの作成の詳細は、「CREATE TYPE」を参照してください。

  • データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。


AS subquery

ビューの基になっている表(実表)の列と行を識別する副問合せを指定します。副問合せのSELECT構文のリストには1000以下の式を指定できます。

リモート表およびリモート・ビューを参照するビューを作成する場合、CREATE DATABASE LINK文のCONNECT TO句を使用して、指定するデータベース・リンクを作成しておく必要があります。また、ビュー副問合せのスキーマ名で修飾する必要があります。

ビューを定義する問合せでflashback_query_clauseを使用してビューを作成した場合、AS OF式は作成時には解析されず、ユーザーがビューを問い合せるたびに解析されます。


関連項目:

Oracleフラッシュバック問合せの詳細は、「結合ビューの作成例:」および『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

ビューを定義する問合せの制限事項: ビュー問合せには、次の制限事項があります。

  • 副問合せでは、CURRVALおよびNEXTVAL疑似列を選択できません。

  • 副問合せでROWIDROWNUMまたはLEVELの各疑似列を選択する場合、そのビュー副問合せには列の別名が必要です。

  • 副問合せでアスタリスク(*)を使用して表のすべての列を選択し、後でその表に新しい列を追加する場合、CREATE OR REPLACE VIEW文を発行してビューを再作成するまで、追加した列はそのビューに含まれません。

  • オブジェクト・ビューの場合、副問合せのSELECT構文のリスト内の要素数は、そのオブジェクト型の最上位属性数と同じである必要があります。それぞれの選択要素のデータ型は、対応する最上位属性と同じである必要があります。

  • SAMPLE句は指定できません。

これらの制限は、マテリアライズド・ビューにも適用されます。

更新可能なビューの注意事項: 更新可能なビューには、次の注意事項があります。

更新可能なビューとは、実表の行を挿入、更新または削除できるビューです。更新可能なビューを作成するか、またはビューにINSTEAD OFトリガーを作成して更新可能にすることができます。

更新可能なビューの列を更新する方法を確認するには、USER_UPDATABLE_COLUMNSデータ・ディクショナリ・ビューを問い合せます。このビューで表示される情報は、更新可能なビューのみに意味があります。ビューを更新可能にするには、次の条件が満たされている必要があります。

  • ビューの各列は、単一表の列にマップする必要があります。たとえば、ビューの列がTABLE句の出力にマップする場合(コレクション・ネスト解除)、ビューは更新可能ではありません。

  • ビューには、次の構造体が含まれていない必要があります。

    集合演算子
    DISTINCT演算子
    集計ファンクションまたは分析ファンクション
    GROUP BYORDER BYMODELCONNECT BYまたはSTART WITH
    SELECT構文のリストにあるコレクション式
    SELECT構文のリストにある副問合せ
    WITH READ ONLYが指定された副問合せ
    結合(一部の例外を除く。詳細は、『Oracle Database管理者ガイド』を参照してください。)
  • 更新可能なビューが疑似列または式を含む場合は、これらの疑似列または式を参照するUPDATE文を使用して、実表の行を更新できません。

  • 結合ビューを更新可能にする場合、次のすべての条件が満たされている必要があります。

    • DML文は、結合の基になる1つの表のみに影響する。

    • INSERT文で、WITH CHECK OPTIONを指定してビューを作成しておらず、値が挿入されたすべての列がキー保存表の列である。実表の各主キーまたは一意キーの値に対するキー保存表は、結合ビューで一意である。

    • UPDATE文で、WITH CHECK OPTIONを指定してビューを作成しておらず、更新されるすべての列はキー保存表から抽出されている。

    • DELETE文の場合、結合によって複数のキー保存表が作成されると、ビューがWITH CHECK OPTIONを指定して作成されたかどうかにかかわらず、FROM句に指定された最初の表から削除されます。


関連項目:

  • 更新可能なビューの詳細は、『Oracle Database管理者ガイド』を参照してください。

  • 更新可能な結合ビューおよびキー保存表の例については、「更新可能なビューの作成例:」および「結合ビューの作成例:」を参照してください。更新できないビューのINSTEAD OFトリガーの例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。


XMLType_view_clause

この句を使用すると、XMLTypeビューを作成できます。このビューには、XMLTypeのXMLスキーマベースの表のデータが表示されます。XMLSchema_specは、XMLデータを対応するオブジェクト・リレーショナル・データにマップするために使用するXMLスキーマを示します。XMLスキーマは、XMLTypeビューを作成する前に作成しておく必要があります。

WITH OBJECT IDENTIFIER およびWITH OBJECT ID句は、区別なしに使用できますが、意味を明確にするために用意されています。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。


関連項目:


subquery_restriction_clause

subquery_restriction_clauseを使用すると、次のいずれかの方法で、ビューを定義する問合せを制限できます。

WITH READ ONLY WITH READ ONLYを指定すると、表またはビューを更新禁止にできます。

WITH CHECK OPTION WITH CHECK OPTIONを指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM句内の副問合せには指定できますが、WHERE句内の副問合せには指定できません。

CONSTRAINT constraint READ ONLYまたはCHECK OPTION制約の名前を指定します。この識別子を省略した場合、その制約にSYS_Cnという形式の名前が自動的に割り当てられます。この場合のnは、その制約名をデータベース内で一意の名前にする整数です。


注意:

表にWITH CHECK OPTIONを指定すると、挿入および更新処理の結果、表を定義する副問合せによって選択可能な表が戻されることが保証されます。ビューでは、次の場合、WITH CHECK OPTIONを指定してもこれらの保証はされません。
  • 対象のビュー、または対象のビューの基礎となるビューを定義する問合せ内に、副問合せが含まれている場合。

  • INSERTUPDATEまたはDELETE操作がINSTEAD OFトリガーを使用して実行された場合。


subquery_restriction_clauseの制限事項: ORDER BY句を指定した場合、この句は指定できません。

ビューの作成例: 次の文は、サンプル表employeesemp_viewという名前のビューを作成します。このビューには、部門20の従業員とその年間給与が表示されます。

CREATE VIEW emp_view AS 
   SELECT last_name, salary*12 annual_salary
   FROM employees 
   WHERE department_id = 20;

この場合、副問合せで式salary*12に列の別名(annual_salary)を使用しているため、この式に基づく列の名前をビュー宣言で定義する必要はありません。

エディショニング・ビューの作成例: 

次の文は、orders表のエディショニング・ビューを作成します。

CREATE EDITIONING VIEW ed_orders_view (o_id, o_date, o_status)
  AS SELECT order_id, order_date, order_status FROM orders
  WITH READ ONLY;

このビューを使用すると、アップグレードなどの管理操作時に、アプリケーションに影響を与えることなくorders表に対するDDL変更を実行できます。DML操作がこのビューそのものを対象とした場合にDMLトリガーを起動するよう、このビューにDMLトリガーを作成できます。ただし、DML操作がorders表を対象とした場合には起動しません。

制約付きのビューの作成例: 次の文は、サンプル表hr.employeesの制限付きのビューを作成し、ビューの列emailに一意制約を定義し、ビューの列emp_idにビューに対する主キー制約を定義します。

CREATE VIEW emp_sal (emp_id, last_name, 
      email UNIQUE RELY DISABLE NOVALIDATE,
   CONSTRAINT id_pk PRIMARY KEY (emp_id) RELY DISABLE NOVALIDATE)
   AS SELECT employee_id, last_name, email FROM employees;

更新可能なビューの作成例: 次の文は、employees表内の事務員全員の更新可能なビューclerkを作成します。従業員のID、姓、部門番号および職種はビューで参照でき、事務員の行のこれらの列のみを更新できます。

CREATE VIEW clerk AS
   SELECT employee_id, last_name, department_id, job_id 
   FROM employees
   WHERE job_id = 'PU_CLERK' 
      or job_id = 'SH_CLERK' 
      or job_id = 'ST_CLERK';

このビューでは、購買係のjob_idを購買マネージャ(PU_MAN)に変更できます。

UPDATE clerk SET job_id = 'PU_MAN' WHERE employee_id = 118;

次の例は、同じビューをWITH CHECK OPTION付きで作成します。新しい従業員が事務員ではない場合は、clerkに新しい行を挿入できません。従業員のjob_idを他の事務タイプに更新できますが、事務員以外のjob_idの場合はビューがemployeesにアクセスできないため、正常に更新できません。

CREATE VIEW clerk AS
   SELECT employee_id, last_name, department_id, job_id 
   FROM employees
   WHERE job_id = 'PU_CLERK' 
      or job_id = 'SH_CLERK' 
      or job_id = 'ST_CLERK'
   WITH CHECK OPTION;

結合ビューの作成例: 結合ビューは、結合を含むビューの副問合せを持つビューです。副問合せの結合において、一意索引を持つ列が1列以上ある場合、結合ビューで1つの実表を変更できます。結合ビューの中の列が更新可能であるかどうかは、USER_UPDATABLE_COLUMNSを問い合せることでわかります。次に例を示します。

CREATE VIEW locations_view AS
   SELECT d.department_id, d.department_name, l.location_id, l.city
   FROM departments d, locations l
   WHERE d.location_id = l.location_id;

SELECT column_name, updatable 
   FROM user_updatable_columns
   WHERE table_name = 'LOCATIONS_VIEW'
   ORDER BY column_name, updatable;

COLUMN_NAME                    UPD
------------------------------ ---
DEPARTMENT_ID                  YES
DEPARTMENT_NAME                YES
LOCATION_ID                    NO
CITY                           NO

前述の例では、locations表のlocation_id列に対する主キー索引は、locations_viewビュー内で一意ではありません。そのため、locationsはキー保存表ではなく、その実表の列は更新できません。

INSERT INTO locations_view VALUES
   (999, 'Entertainment', 87, 'Roma');
INSERT INTO locations_view VALUES
*
ERROR at line 1:
ORA-01776: cannot modify more than one base table through a join view

departments表にマップするビュー内のすべての列に更新可能のマークが付けられていて、departmentsの主キーがビューに保持されているため、departments実表に対して、行の挿入、更新または削除を実行できます。

INSERT INTO locations_view (department_id, department_name)
   VALUES (999, 'Entertainment');

1 row created.

注意:

ビューを使用して表に挿入するには、NOT NULL列に対してDEFAULT値を指定していないかぎり、結合内のすべての表のすべてのNOT NULL列がビューに含まれている必要があります。


関連項目:

結合ビューの更新の詳細は、『Oracle Database管理者ガイド』を参照してください。

読取り専用ビューの作成例: 次の文は、oe.customers表のcustomer_roという名前の読取り専用ビューを作成します。顧客の姓、言語、掛貸限度額のみがこのビューで参照できます。

CREATE VIEW customer_ro (name, language, credit)
      AS SELECT cust_last_name, nls_language, credit_limit
      FROM customers
      WITH READ ONLY;

オブジェクト・ビューの作成例: 次の例では、ocスキーマ内でのinventory_typ型の作成方法、およびその型を基にしたoc_inventoriesビューの作成方法を示します。

CREATE TYPE inventory_typ
 OID '82A4AF6A4CD4656DE034080020E0EE3D'
 AS OBJECT
    ( product_id          NUMBER(6)
    , warehouse           warehouse_typ
    , quantity_on_hand    NUMBER(8)
    ) ;
/
CREATE OR REPLACE VIEW oc_inventories OF inventory_typ
 WITH OBJECT OID (product_id)
 AS SELECT i.product_id,
           warehouse_typ(w.warehouse_id, w.warehouse_name, w.location_id),
           i.quantity_on_hand
    FROM inventories i, warehouses w
    WHERE i.warehouse_id=w.warehouse_id;

XMLType表のビューの作成例: 次の例は、XMLTypexwarehouses(「例」で作成)の通常のビューを作成します。

CREATE VIEW warehouse_view AS
   SELECT VALUE(p) AS warehouse_xml
   FROM xwarehouses p;

このビューからは、次のように選択します。

SELECT e.warehouse_xml.getclobval()
   FROM warehouse_view e
   WHERE EXISTSNODE(warehouse_xml, '//Docks') =1;

XMLTypeビューの作成例: オブジェクト・リレーショナル表に、XMLTypeビューを作成する場合もあります。次の例は、サンプル表oe.warehouses内のXMLTypewarehouse_specと同様のオブジェクト・リレーショナル表を作成し、その表のXMLTypeビューを作成します。

CREATE TABLE warehouse_table 
(
  WarehouseID       NUMBER,
  Area              NUMBER,
  Docks             NUMBER,
  DockType          VARCHAR2(100),
  WaterAccess       VARCHAR2(10),
  RailAccess        VARCHAR2(10),
  Parking           VARCHAR2(20),
  VClearance        NUMBER
);

INSERT INTO warehouse_table 
   VALUES(5, 103000,3,'Side Load','false','true','Lot',15);

CREATE VIEW warehouse_view OF XMLTYPE
 XMLSCHEMA "http://www.example.com/xwarehouses.xsd" 
    ELEMENT "Warehouse"
    WITH OBJECT ID 
    (extract(OBJECT_VALUE, '/Warehouse/Area/text()').getnumberval())
 AS SELECT XMLELEMENT("Warehouse",
            XMLFOREST(WarehouseID as "Building",
                      area as "Area",
                      docks as "Docks",
                      docktype as "DockType",
                      wateraccess as "WaterAccess",
                      railaccess as "RailAccess",
                      parking as "Parking",
                      VClearance as "VClearance"))
  FROM warehouse_table;

このビューは、次のように問い合せます。

SELECT VALUE(e) FROM warehouse_view e;