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 権限
構文
説明
- schema-name
- スキーマの名前となる ID。 この名前は、カタログで既に記述されているスキーマを指定するものであってはなりません (SQLSTATE 42710)。 SYS で始まる名前は使用できません (SQLSTATE 42939)。 スキーマの所有者は、ステートメントを発行した許可 ID です。
- AUTHORIZATION
- スキーマの所有者であるユーザーを指定します。 authorization-name の値は、スキーマの名前の指定にも使用されます。 authorization-name は、 カタログで既に記述されているスキーマを指定するものであってはなりません (SQLSTATE 42710)。
- スキーマ名 AUTHORIZATION
- 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) )