CREATE SCHEMA
CREATE SCHEMA ステートメントは、現行サーバーにスキーマを定義し、オプションとして、表、ビュー、別名、索引、シーケンス、および特殊タイプを作成します。 これらの オブジェクトのカタログ記述内にコメントおよびラベルを加えることができ、ユーザーに特権を付与することができます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。
権限
このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
- 次の CL コマンドに対する *USE システム権限
- ライブラリー作成 (CRTLIB)
- WITH DATA DICTIONARY を指定する場合は、データ・ディクショナリー作成 (CRTDTADCT)
- データベース管理者権限
このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
- CREATE SCHEMA ステートメントに含まれている各 SQL ステートメントについて定義されている特権
- データベース管理者権限
AUTHORIZATION 文節の指定がある場合、そのステートメントの権限 ID によって保持される特権には、少なくとも次の 1 つが含まれていなければなりません。
- 権限名によって識別されるユーザー・プロファイルに対する *ADD システム権限
- データベース管理者権限
構文
>>-CREATE SCHEMA------------------------------------------------> >--+-schema-name--+-------------------------------------+-+-----> | | .-SCHEMA-. | | | '-FOR -+--------+--system-schema-name-' | '-AUTHORIZATION--authorization-name--------------------' >--+----------------------+-------------------------------------> '-IN ASP--+-integer--+-' '-ASP-name-' >--+----------------------------------------------------+------>< | .------------------------------------------------. | | V | | '---+-COMMENT statement--------------------------+-+-' +-CREATE ALIAS statement---------------------+ +-CREATE INDEX statement---------------------+ +-CREATE SEQUENCE statement------------------+ +-CREATE TABLE statement---------------------+ +-CREATE TYPE (Array) statement--------------+ +-CREATE TYPE (Distinct) statement-----------+ +-CREATE VIEW statement----------------------+ +-GRANT (Sequence Privileges) statement------+ +-GRANT (Table or View Privileges) statement-+ +-GRANT (Type Privileges) statement----------+ | (1) | '-LABEL statement----------------------------'
- CREATE SCHEMA ステートメント内では、スキーマ内に作成されるオブジェクト・タイプに対するラベルおよびコメントのみ がサポートされます。
説明
- schema-name
- スキーマの名前を指定します。スキーマは、この名前で作成されます。
スキーマ名を指定すると、このステートメントの権限 ID は、実行時権
限 ID になります。この名前は、現行サーバーにある既存のスキーマの名前と同じで
あってはなりません。この名前を「SYS」または「Q」で始めることはできません。これらのスキーマ名は、スキーマがシステム・スキーマ であることを示します。
schema-name が有効なシステム名ではなく、system-schema-name を指定しないと、SQL はシステム名を生成します。名前の生成に関する規則については、スキーマ名の生成規則を参照してください。
- FOR SCHEMA system-schema-name
- スキーマのシステム名を示します。system-schema-name は、現行サーバーの既存のスキーマと同じにすることはできません。
system-schema-name は、有効なシステム名である非修飾システム ID でなければなりません。
schema-name および system-schema-name をどちらも指定すると、両方を有効なシステム名にすることはできません。
- authorization-name
- ステートメントの権限 ID を示します。この権限名は、スキーマ名でも あります。この名前は、現行サーバーにある既存のスキーマの名前と同じで あってはなりません。
- IN ASP integer
- スキーマを作成したい補助記憶域プール (ASP) を指定します。1 から 32 までの整数を指定します。 1 を指定した場合、スキーマはシステム ASP に作成されます。この文節を省略すると、1 の ASP が想定されます。
- IN ASP ASP-name
- スキーマを作成したい補助記憶域プール (ASP) を指定します。この名前は、現行サーバーに存在する補助記憶域プールを示すものでなければなりません。
- COMMENT ステートメント
- スキーマ内に作成されるオブジェクトのカタログ記述内のコメント を追加または置換します。スキーマ内に作成されるオブジェクトに対するコメントのみが 許可されます。COMMENTの COMMENT ステートメントの節を参照してください。
- CREATE ALIAS ステートメント
- 別名を作成してスキーマ内に入れます。CREATE ALIASの CREATE ALIAS ステートメントの節を参照してください。
- CREATE INDEX ステートメント
- 索引を作成してスキーマ内に入れます。CREATE INDEXの CREATE INDEX ステートメントの節を参照してください。
- CREATE SEQUENCE ステートメント
- シーケンスを作成してスキーマ内に入れます。CREATE SEQUENCEの CREATE SEQUENCE ステートメントの節を参照してください。
- CREATE TABLE ステートメント
- 表を作成してスキーマ内に入れます。CREATE TABLEの CREATE TABLE ステートメントの節を参照してください。
- CREATE TYPE (配列) ステートメント
- 配列タイプを作成してスキーマ内に入れます。CREATE TYPE (配列)の CREATE TYPE (配列) ステートメントの節を参照してください。
- CREATE TYPE (特殊) ステートメント
- ユーザー定義の特殊タイプを作成してスキーマ内に入れます。 CREATE TYPE (特殊)の CREATE TYPE (特殊) ステートメントの節を参照してください。
- CREATE VIEW ステートメント
- ビューを作成してスキーマ内に入れます。CREATE VIEWの CREATE VIEW ステートメントの節を参照してください。
- GRANT (シーケンス特権) ステートメント
- スキーマ内のシーケンスに対する特権を与えます。GRANT (シーケンス特権)の GRANT ステートメントの節を参照してください。
- GRANT (表またはビュー特権) ステートメント
- このスキーマの表およびビューに対する特権を与えます。GRANT (表またはビューの特権)の GRANT ステートメントの節を参照してください。
- GRANT (タイプ特権) ステートメント
- スキーマ内のタイプに対する特権を与えます。GRANT (タイプ特権)の GRANT ステートメントの節を参照してください。
- LABEL ステートメント
- スキーマ内に作成されるオブジェクトのカタログ記述内のラベル を追加または置換します。スキーマ内に作成されるオブジェクトに対するラベルのみが 許可されます。 LABELの LABEL ステートメントの項を参照してください。
注
スキーマの属性 : スキーマは以下のものとして作成されます。
- ライブラリー: ライブラリーは、関連オブジェクトをグループ化し、名前で オブジェクトを見つけることができるようにします。
- カタログ: カタログには、そのスキーマ内の表、ビュー、索引、および他のオブジェクトの記述が含まれます。カタログは、一連のビューで構成されます。 詳しくは、「SQL プログラミング」を参照してください。
- ジャーナルおよびジャーナル・レシーバー: ジャーナル QSQJRN とジャーナル・レシーバー QSQJRN0001 がスキーマ内に作成され、 以後にスキーマ内に作成されるすべての表への変更を記録するのに使用されます。 詳しくは、「ジャーナル管理」を参照してください。
分散表に対して作成される索引は、この表が配布されるサーバーのすべてで 作成されます。 分散表についての詳細は、DB2® マルチシステム (Multisystem) を参照してください。
オブジェクトの所有権 : スキーマおよび作成したオブジェクトの所有者は以下のように決定されます。
- AUTHORIZATION 文節が指定されている場合は、指定された権限 ID が、このステートメントによって作成されたスキーマおよびすべてのオブジェクトを所有します。
- これら以外の場合は、このステートメントによって作成されるスキーマおよびすべてのオブジェクトの所有者 は、このステートメントを実行するスレッドのユーザー・プロファイルまたはグループ・ユーザー・プロファイルです。
オブジェクトの権限 : SQL 名を使用する場合 は、スキーマおよびその他のオブジェクトは、*PUBLIC に対する システム権限 *EXCLUDE を使用して作成され、作成権限パラメーター CRTAUT(*EXCLUDE) を 指定してライブラリーが作成されます。 スキーマに関する権限を持つユーザーは、スキーマの所有者だけで す。他のユーザーがそのスキーマに対する権限を必要とする場合、スキーマ の所有者は、CL コマンドのオブジェクト権限付与 (GRTOBJAUT) を 使用して、作成したオブジェクトに対する権限を与えることができます。
システム名を使用する場合は、スキーマおよびその他のオブジェクトの 作成時に *PUBLIC に与えられるシステム権限は、システム値 QCRTAUT に よって決まり、ライブラリーは CRTAUT(*SYSVAL) を指定して作成されます。 システム・セキュリティーについて詳しくは、機密保護解説書、および SQL プログラミングを参照してください。
スキーマの所有者がグループ・プロファイルのメンバー (GRPPRF キーワード ) であり、グループ権限が指定されている (GRPAUT キーワード) 場合は、そ のグループ・プロファイルにも、そのスキーマに対する権限が与えられます。
オブジェクト名: CREATE TABLE、CREATE INDEX、CREATE ALIAS、CREATE TYPE、CREATE SEQUENCE、または CREATE VIEW ステートメントに、作成中の表、索引、別名、特殊タイプ、 シーケンス、またはビューの修飾名を指定する場合は、その修飾名の中のスキーマ名には、作成中のスキーマと同一の名前を指定する必要があります。スキーマ定義で参照されるその他のオブジェクト名は、どのようなスキーマ 名で修飾されていても構いません。どの SQL ステートメントにおいても、非 修飾の表、索引、別名、特殊タイプ、シーケンス、またはビューの名前は、作成される スキーマの名前で暗黙的に修飾されます。
SQL ステートメント相互間には、区切り記号を使用しません。
SQL ステートメント長: RUNSQLSTM コマンドによって CREATE SCHEMA ステートメントが実行される場合、CREATE SCHEMA ステートメント内の個々の CREATE TABLE、CREATE INDEX、CREATE TYPE、CREATE ALIAS、CREATE SEQUENCE、CREATE VIEW、COMMENT、LABEL、または GRANT ステートメントの最大長は、どれも 2 097 152 です。それ以外の場合は、CREATE SCHEMA ステートメント全体として 2 097 152 に制限されます。
ネーム解決のパフォーマンス: スキーマの名前は、そのスキーマ内のオブジェクトを参照するステートメントのパフォーマンスに影響を及ぼす可能性があります。スキーマ名の長さが 30 を超えると、スキーマ内のオブジェクト検索のパフォーマンスは、スキーマ名の長さが 30 以内の場合に比べて劣るようになります。パフォーマンス上の影響を最小限にとどめるには、システム名とスキーマ名の最初の 5 文字を同じにしてください。
代替構文 : 旧リリースとの互換性を維持するために、 SCHEMA の同義語として COLLECTION キーワードを使用できます。 これは標準キーワードではないので、使用しないようにしてください。
推奨されない機能: WITH DATA DICTIONARY 文節を使用すると、スキーマ内に IDDU データ・ディクショナリーが作成されます。この文節は現在もサポートされており、CREATE SCHEMA ステートメントの終わりで指定することはできますが、推奨されません。
データ・ディクショナリーを指定して作成されたスキーマには、LOB 列、XML 列、または DATALINK 列を含む表を入れることはできません。この文節は、カタログ・ビューの作成には効果がありません。
スキーマ名の生成規則
10 文字を超える名前のスキーマが作成されると、システム名が生成されます。
SQL 名、または対応するシステム名はいずれも、SQL ステートメントで使用して、作成済みの該当スキーマのアクセスに用いることができます。ただし、SQL 名を識別するのは、DB2 for i だけであり、他の環境では、システム名を使用する必要があります。
schema-name が 10 文字を超える通常 ID の場合、10 文字からなる system-schema-name が以下のように生成されます。
- その名前の最初の 5 文字
- 5 桁の固有の番号
例えば、次のようになります。
LONGSCHEMANAME の system-schema-name は LONGS00001 となります。
- 区切り文字の最初の 4 文字が system-schema-name の最初の 4 文字として使用されます。
- 最初の 4 文字がすべて大文字、数字、または下線の場合、下線と 5 桁の数値が付加されます。
- その他の場合、4 桁の固有な数値が付加されます。
例えば、次のようになります。
「longschemaname」のシステム名は「long0001」となります。
「LONGSchemaName」のシステム名は「LONG_00001」となります。
例
例 1: 在庫部品表と部品番号に関する索引を持つスキーマを作成します。 ユーザー・プロファイル JONES に、スキーマに対する権限を与えています。
CREATE SCHEMA INVENTORY
CREATE TABLE PART (PARTNO SMALLINT NOT NULL,
DESCR VARCHAR(24),
QUANTITY INT)
CREATE INDEX PARTIND ON PART (PARTNO)
GRANT ALL ON PART TO JONES
例 2: SMITH の権限 ID を使用してスキーマを作成します。 学生番号列に、コメントを付け、学生表を作成します。
CREATE SCHEMA AUTHORIZATION SMITH
CREATE TABLE SMITH.STUDENT (STUDNBR SMALLINT NOT NULL UNIQUE,
LASTNAME CHAR(20),
FIRSTNAME CHAR(20),
ADDRESS CHAR(50))
COMMENT ON STUDENT (STUDNBR IS 'THIS IS A UNIQUE ID#')