CREATE SCHEMA ステートメント

CREATE SCHEMA ステートメントは、スキーマを定義します。 また、オブジェクトを作成して、 このステートメントでそのオブジェクトに関する特権を与えることも可能です。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

DBADM 権限のある許可 ID は、 任意の有効な schema-name または authorization-name を指定してスキーマを作成できます。

DBADM 権限がない許可 ID は、 ステートメントの許可 ID に一致する schema-name または authorization-name を指定しなければ スキーマを作成できません。

ステートメントに schema-SQL-statement が含まれている場合、 authorization-name (指定されていない場合、 ステートメントの許可 ID がデフォルト解釈される) が持つ特権には、 以下の権限の少なくとも 1 つが含まれている必要があります。
  • それぞれの schema-SQL-statement を実行するために必要な特権
  • DBADM 権限

構文

Read syntax diagramSkip visual syntax diagramCREATE SCHEMAschema-nameAUTHORIZATIONauthorization-nameschema-nameAUTHORIZATIONauthorization-name DATA CAPTURENONECHANGES schema-SQL-statement ENABLE ROW MODIFICATION TRACKING

説明

schema-name
スキーマの名前となる ID。 この名前は、カタログで既に記述されているスキーマを指定するものであってはなりません (SQLSTATE 42710)。 SYS で始まる名前は使用できません (SQLSTATE 42939)。 スキーマの所有者は、ステートメントを発行した許可 ID です。
AUTHORIZATION 許可名
スキーマの所有者であるユーザーを指定します。 authorization-name の値は、スキーマの名前の指定にも使用されます。 authorization-name は、 カタログで既に記述されているスキーマを指定するものであってはなりません (SQLSTATE 42710)。
スキーマ名 AUTHORIZATION authorization-name
schema-name のスキーマを識別します。その所有者が authorization-name です。 schema-name は、カタログに既に記述されているスキーマを識別するものであってはなりません (SQLSTATE 42710)。 schema-name を指定する際に、SYS で始めることはできません (SQLSTATE 42939)。
DATA CAPTURE
データの複製に関する追加情報をログに記録するか否かを指定します。 デフォルトは、データベース構成パラメーター dft_schemas_dccの値に基づいて決定されます。 値が「Yes」の場合、デフォルトは CHANGES です。それ以外の場合、デフォルトは NONE です。
NONE
データの複製に関する追加情報をログに記録しないことを指定します。
CHANGES
このスキーマに対する SQL 変更についての追加情報をログに書き込むことを指定します。 このオプションは、このスキーマを複製する場合に、レプリケーション・キャプチャー・プログラムを使用してログからこのスキーマに対する変更内容をキャプチャーする場合は必須です。
スキーマ-SQL ステートメント
CREATE SCHEMA ステートメントに組み込むことができる SQL ステートメントは、 次のとおりです。
  • CREATE TABLE ステートメント (型付き表およびマテリアライズ照会表は除く)
  • CREATE VIEW ステートメント (型付きビューは除く)
  • CREATE INDEX ステートメント
  • COMMENT ステートメント
  • GRANT ステートメント
ENABLE ROW MODIFICATION TRACKING
スキーマに作成された表の論理バックアップを有効にすることを示します。 カラム・オーガナイズ表にのみ適用されます。 制約事項のリストについては、「 行変更トラッキングが有効になっているスキーマ」を参照してください。

  • スキーマの所有者は、以下のように決定されます。
    • AUTHORIZATION 節が指定されている場合は、 指定された authorization-name がスキーマの所有者になります。
    • AUTHORIZATION 節の指定がない場合は、 CREATE SCHEMA ステートメントを発行した許可 ID がスキーマの所有者になります。
  • スキーマの所有者は、ユーザーであることが想定されます (グループではなく)。
  • CREATE SCHEMA ステートメントを使用してスキーマを明示的に作成すると、 スキーマの所有者はそのスキーマに関して CREATEIN 特権、DROPIN 特権、 および ALTERIN 特権を与えられ、これらの特権を他のユーザーに与えることができます。
  • CREATE SCHEMA ステートメントの一部として作成されるオブジェクトの定義者は、スキーマの所有者になります。 スキーマの所有者は、 CREATE SCHEMA ステートメントの一環として与えられる特権の付与者でもあります。
  • CREATE SCHEMA ステートメント中の SQL ステートメント中の非修飾のオブジェクト名は、 作成されたスキーマの名前によって暗黙的に修飾されます。
  • 8 バイトより短いスキーマ名にはブランクが埋め込まれ、8 バイトの名前としてカタログに保管されます。
  • CREATE ステートメントに、作成するオブジェクトの修飾名が含まれる場合、 その修飾名に指定されたスキーマ名は 作成されるスキーマの名前と同じでなければなりません (SQLSTATE 42875)。 ステートメントで参照されるその他のオブジェクトは、 任意の有効なスキーマ名で修飾することができます。
  • スキーマ名として SESSION を使用することは推奨されません。 宣言済み一時表は SESSION で修飾されていなければならないので、 アプリケーションで、持続表と同一の名前を付けた一時表を宣言することがあり得ます。 スキーマ名 SESSION の付いた表を参照する SQL ステートメントは、 同一名の持続表ではなく宣言済み一時表に解決されてしまいます (ステートメントのコンパイル時に)。 組み込み静的および動的な組み込み SQL ステートメントでは、 別々の時点で SQL ステートメントのコンパイルが行われるので、 結果は、宣言済み一時表がいつ定義されたかによって異なってしまいます。 持続表、ビュー、または別名が、SESSION というスキーマ名を使って定義されていなければ、 これらの事項にとらわれる必要はありません。
  • スキーマ・レベルで DATA CAPTURE 属性を設定した場合、表を新しく作成するときに DATA CAPTURE 属性が表レベルで指定されていなければ、その属性がスキーマから継承されます。

  • 例 1: DBADM 権限のあるユーザーが、 RICK という名前のスキーマをユーザー RICK を所有者として作成します。
       CREATE SCHEMA RICK AUTHORIZATION RICK
  • 例 2: 部品の在庫表と部品番号の索引があるスキーマを作成します。 ユーザー JONES に、表に対する権限を与えます。
       CREATE SCHEMA INVENTRY
    
         CREATE TABLE PART (PARTNO   SMALLINT NOT NULL,
                            DESCR    VARCHAR(24),
                            QUANTITY INTEGER)
    
         CREATE INDEX PARTIND ON PART (PARTNO)
    
         GRANT ALL ON PART TO JONES
  • 例 3: 2 つの表がある PERS という名前のスキーマを作成します。 それぞれの表には他の表を参照する外部キーがあります。 これは、 ALTER TABLE ステートメントを使用せずにこのような表のペアを作成する CREATE SCHEMA ステートメントの機能の一例です。
       CREATE SCHEMA PERS
    
         CREATE TABLE ORG (DEPTNUMB  SMALLINT NOT NULL,
                            DEPTNAME VARCHAR(14),
                            MANAGER  SMALLINT,
                            DIVISION VARCHAR(10),
                            LOCATION VARCHAR(13),
                            CONSTRAINT PKEYDNO
                              PRIMARY KEY (DEPTNUMB),
                            CONSTRAINT FKEYMGR
                              FOREIGN KEY (MANAGER)
                              REFERENCES STAFF (ID) )
    
         CREATE TABLE STAFF (ID        SMALLINT NOT NULL,
                             NAME     VARCHAR(9),
                             DEPT     SMALLINT,
                             JOB      VARCHAR(5),
                             YEARS    SMALLINT,
                             SALARY   DECIMAL(7,2),
                             COMM     DECIMAL(7,2),
                             CONSTRAINT PKEYID
                               PRIMARY KEY (ID),
                             CONSTRAINT FKEYDNO
                               FOREIGN KEY (DEPT)
                               REFERENCES ORG (DEPTNUMB) )