CREATE EDITION
目的
この文は、既存のエディションの子として新規エディションを作成します。エディションによって、データベース内に同じエディション化可能なオブジェクトを2バージョン以上保持できるようになります。エディションを作成すると、このエディションは、その親エディションのエディション化可能なオブジェクトのすべてを即座に継承します。次のオブジェクト型は、エディション化可能です。
-
シノニム
-
ビュー
-
ファンクション
-
プロシージャ
-
パッケージ(仕様部および本体)
-
タイプ(仕様部および本体)
-
ライブラリ
-
トリガー
エディション化可能なオブジェクトは、エディションが有効化されたスキーマ内にある、前述のいずれかのエディション化可能なオブジェクト型です。データベース内にこのような複数バージョンのオブジェクトを含めることができるため、オンラインのアプリケーション・アップグレードが大幅に簡略化されます。
ノート:
前述のリストにないすべてのデータベース・オブジェクト型は、エディション化可能ではありません。エディション化可能でないオブジェクト型に対する変更内容は、データベース内のすべてのエディションからすぐに参照可能になります。
新規作成またはアップグレードされたOracle Databaseにはそれぞれ、ORA$BASE
という名前のデフォルトのエディションがあり、それは、CREATE
EDITION
文により作成される最初のエディションの親として機能します。その後に、ALTER
DATABASE
DEFAULT
EDITION
文を使用して、ユーザー定義のエディションをデータベースのデフォルト・エディションとして指定できます。
関連項目:
-
エディション化可能なオブジェクト・タイプおよびエディションの詳細は、『Oracle Database開発ガイド』を参照してください。
-
エディションをデータベースのデフォルト・エディションとして指定する方法の詳細は、「
ALTER
DATABASE
」の「DEFAULT EDITION句」を参照してください。
前提条件
エディションを作成する場合は、直接またはロールを介して付与されたCREATE
ANY
EDITION
システム権限が必要です。エディションを他のエディションの子として作成する場合は、親エディションに対するUSE
オブジェクト権限が必要です。
構文
create_edition::=
セマンティクス
edition
作成するエディションの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。
データベースに対して作成済のエディションを表示する場合は、DBA_OBJECTS
またはALL_OBJECTS
データ・ディクショナリ・ビューのEDITION_NAME
列を問い合せます。
エディションを作成すると、作成したエディションに対するWITH
GRANT
OPTION
付きのUSE
オブジェクト権限がシステムにより自動的に付与されます。
ノート:
エディションに、ORA
、ORACLE
、SYS
、DBA
およびDBMS
の接頭辞を含む名前を付けないことをお薦めします。これらの接頭辞は内部使用のために確保されているためです。
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
オブジェクトが存在していない場合は、文の最後に新しいオブジェクトが作成されます。
-
オブジェクトが存在している場合、これは文の最後の時点にあるオブジェクトになります。古いオブジェクトが検出されるため、新しいものは作成されません。
IF EXISTS
はCREATE
とともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statement
が発生します。
AS CHILD OF句
この句を使用した場合、新規エディションはparent_edition
の子として作成されます。この句を指定しない場合、新規エディションはリーフ・エディションの子として作成されます。新規エディションは、作成時に、その親エディションからエディショニングされたすべてのオブジェクトを継承します。
エディションの制限事項
エディションには、子エディションを1つのみ含めることができます。parent_edition
にすでに子エディションを持つエディションを指定した場合、エラーが戻されます。
例
次の簡単な例は、エディションの作成および使用のための構文を示すためのものです。エディションの現実的な使用例については、『Oracle Database開発ガイド』を参照してください。
次の文で、ユーザーHR
には、エディションを作成および使用するために必要な権限が付与されます。
GRANT CREATE ANY EDITION, DROP ANY EDITION to HR; Grant succeeded. ALTER USER hr ENABLE EDITIONS; User altered.
HR
は、テストの目的で新規のエディションTEST_ED
を作成します。
CREATE EDITION test_ed;
次に、HR
は、最初に現行のエディションがデフォルト・エディションであることを確認し、テストの目的で、デフォルト・エディションORA$BASE
内にエディショニング・ビューed_view
を作成します。
SELECT SYS_CONTEXT('userenv', 'current_edition_name') FROM DUAL; SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------------------- ORA$BASE 1 row selected. CREATE EDITIONING VIEW e_view AS SELECT last_name, first_name, email FROM employees; View created. DESCRIBE e_view Name Null? Type ----------------------------------------- -------- ---------------------------- LAST_NAME NOT NULL VARCHAR2(25) FIRST_NAME VARCHAR2(20) EMAIL NOT NULL VARCHAR2(25)
その後、HR
がTEST_ED
エディションを使用して異なる書式でビューを再作成すると、ビューはTEST_ED
エディション内で実体化されます。
ALTER SESSION SET EDITION = TEST_ED; Session altered. CREATE OR REPLACE EDITIONING VIEW e_view AS SELECT last_name, first_name, email, salary FROM employees; View created.
TEST_ED
エディション内のビューには、次の追加の列が含まれます。
DESCRIBE e_view Name Null? Type ----------------------------------------- -------- ---------------------------- LAST_NAME NOT NULL VARCHAR2(25) FIRST_NAME VARCHAR2(20) EMAIL NOT NULL VARCHAR2(25) SALARY NUMBER(8,2)
ORA$BASE
エディション内のビューは、テスト環境から孤立したままです。
ALTER SESSION SET EDITION = ora$base; Session altered. DESCRIBE e_view; Name Null? Type ----------------------------------------- -------- ---------------------------- LAST_NAME NOT NULL VARCHAR2(25) FIRST_NAME VARCHAR2(20) EMAIL NOT NULL VARCHAR2(25)
テスト環境からビューを削除しても、ビューはORA$BASE
エディション内に残ります。
ALTER SESSION SET EDITION = TEST_ED; Session altered. DROP VIEW e_view; View dropped. ALTER SESSION SET EDITION = ORA$BASE; Session altered. DESCRIBE e_view; Name Null? Type ----------------------------------------- -------- ---------------------------- LAST_NAME NOT NULL VARCHAR2(25) FIRST_NAME VARCHAR2(20) EMAIL NOT NULL VARCHAR2(25)
TEST_ED
エディションを必要とするアップグレードのテストが完了したら、エディションを削除できます。
DROP EDITION TEST_ED;