SQL 解説書
CREATE SCHEMA ステートメントは、スキーマを定義します。
また、オブジェクトを作成して、
このステートメントでそのオブジェクトに関する特権を与えることも可能です。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、
または動的 SQL ステートメントを使用して発行することができます。
このステートメントは、動的に準備可能な実行可能ステートメントです。
しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、
ステートメントを動的に準備することはできません (SQLSTATE 42509)。
許可
SYSADM 権限または DBADM 権限のある許可 ID は、
任意の有効な schema-name または authorization-name を指定してスキーマを作成できます。
SYSADM 権限または DBADM 権限がない許可 ID は、
ステートメントの許可 ID に一致する schema-name または authorization-name を指定しなければ
スキーマを作成できません。
ステートメントに schema-SQL-statement が含まれている場合、
authorization-name (指定されていない場合、
ステートメントの許可 ID がデフォルト解釈される) が持つ特権には、
以下の特権の少なくとも 1 つが含まれている必要があります。
- それぞれの schema-SQL-statement を実行するために必要な特権
- SYSADM または DBADM 権限
構文
>>-CREATE SCHEMA------------------------------------------------>
>-----+-schema-name-------------------------------------+------->
+-AUTHORIZATION--authorization-name---------------+
'-schema-name--AUTHORIZATION--authorization-name--'
>-----+------------------------------+-------------------------><
| .------------------------. |
| V | |
'----schema-SQL-statement---+--'
説明
- schema-name
- スキーマの名前を指定します。
この名前は、カタログですでに記述されているスキーマを指定するものであってはなりません (SQLSTATE 42710)。
"SYS" で始まる名前は使用できません (SQLSTATE 42939)。
スキーマの所有者は、ステートメントを発行した許可 ID です。
- AUTHORIZATION authorization-name
- スキーマの所有者であるユーザーを指定します。
値 authorization-name は、スキーマの名前の指定にも使用されます。
authorization-name は、
カタログですでに記述されているスキーマを指定するものであってはなりません (SQLSTATE 42710)。
- schema-name AUTHORIZATION authorization-name
- authorization-name という名前のユーザーをスキーマの所有者として、
schema-name という名前のスキーマを指定します。
schema-name は、
カタログですでに記述されているスキーマのスキーマ名を指定するものであってはなりません (SQLSTATE 42710)。
schema-name には "SYS" で始まる名前は使用できません (SQLSTATE 42939)。
- schema-SQL-statement
- CREATE SCHEMA ステートメントの一部として組み込むことができる SQL ステートメントは、
次のとおりです。
注
- スキーマの所有者は、以下のように決定されます。
- AUTHORIZATION 文節が指定されている場合は、
指定された authorization-name がスキーマの所有者です。
- AUTHORIZATION 文節の指定がない場合は、
CREATE SCHEMA ステートメントを発行した許可 ID がスキーマの所有者です。
- スキーマの所有者は、ユーザーであることが想定されます (グループではなく)。
- CREATE SCHEMA ステートメントを使用してスキーマを明示的に作成すると、
スキーマの所有者はそのスキーマに関して CREATEIN 特権、DROPIN 特権、
および ALTERIN 特権を与えられ、これらの特権を他のユーザーに与えることができます。
- CREATE SCHEMA ステートメントの一部として作成されるオブジェクトの定義者は、スキーマの所有者です。
スキーマの所有者は、
CREATE SCHEMA ステートメントの一環として与えられる特権の授与者でもあります。
- CREATE SCHEMA ステートメント中の SQL ステートメント中の非修飾のオブジェクト名は、
作成されたスキーマの名前によって暗黙的に修飾されます。
- CREATE ステートメントに、作成するオブジェクトの修飾名が含まれる場合、
その修飾名に指定されたスキーマ名は
作成されるスキーマの名前と同じでなければなりません (SQLSTATE 42875)。
ステートメントで参照されるその他のオブジェクトは、
任意の有効なスキーマ名で修飾することができます。
- AUTHORIZATION 文節が指定され、DCE 認証が使用される場合、
この文節の後に続くステートメントの実行に必要な認証の評価の際に、
指定した authorization-name のグループ・メンバーシップは考慮されません。
指定された authorization-name がスキーマを作成した許可 ID と異なる場合、
CREATE SCHEMA ステートメントの実行時に許可が失敗する場合があります。
- スキーマ名として SESSION を使用しないようお勧めします。
宣言された一時表は SESSION で修飾されていなければならないので、
アプリケーションで、持続表と同一の名前を付けた一時表を宣言することがあり得ます。
スキーマ名 SESSION の付いた表を参照する SQL ステートメントは、
同一名の持続表ではなく宣言された一時表に解決されます (ステートメントのコンパイル時に)。
静的組み込みおよび動的な組み込み SQL ステートメントでは、
SQL ステートメントのコンパイルは別々の時点で行われるので、
結果は、宣言された一時表がいつ定義されたかによって異なります。
持続表、視点、または別名が、SESSION というスキーマ名を使って定義されていなければ、
これらの事項にとらわれる必要はありません。
例
例 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) )
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]