表およびビューには、CREATE TABLE文およびCREATE VIEW文で名前を付けます。これらのSQL文およびその他のSQL文では、CREATE文で表およびビューに付けた名前を別名で修飾できます。また、表名およびビュー名で列名を修飾できます。
データベースのマルチスキーマ・オプションが有効な場合は、表名およびビュー名をスキーマ名とカタログ名、または別名で修飾することもできます。別名と表名の組合せを二重引用符で囲み、使用する言語をANSI/ISO SQL規格に設定するか、またはANSI/ISO SQL規格の引用ルールを使用する必要があります。言語および引用ルールの詳細は、「SET DIALECT文」および「SET QUOTING RULES文」を参照してください。別名CORP、カタログADMINISTRATION、スキーマPERSONNELであるデータベースにあるEMPLOYEES表の有効な名前を次に示します。
構文図では、table-nameおよびview-nameの構文要素は、CREATE文で表またはビューに付けた名前の修飾済または未修飾のいずれかの形式を参照します。つまり、構文図ではtable-nameおよびview-nameは常に次のように定義されます。
![]() ![]() |
表およびビューがデフォルトのデータベースにない場合、これらを別名で修飾する必要があります。次の例は、別名が事前に宣言されているデータベースを、別名で修飾されていない表名を使用して参照しようとした場合にSQLで生成されるエラーを示しています。
SQL> ATTACH 'ALIAS PERS PATHNAME personnel'; SQL> SET QUOTING RULES 'SQL92'; SQL> SELECT * FROM EMPLOYEES; %SQL-F-NODEFDB, There is no default database SQL> -- This statement will work: SQL> SELECT * FROM "PERS.EMPLOYEES"; |
システムのデフォルトのカタログはRDB$CATALOGです。システムのデフォルトのスキーマはユーザー名です。これらのデフォルトは、SQLモジュールのヘッダーやプリコンパイラのコンテキスト・ファイルに設定するか、SET文で対話的に設定できます。マルチスキーマ・データベースでは、表およびビューがデフォルトのカタログにない場合、これらをカタログ名で修飾する必要があります。また、表およびビューがデフォルトのスキーマにない場合は、スキーマ名も修飾に使用する必要があります。エラー・メッセージは、デフォルトのスキーマがユーザー名LUFKINに設定されていることを示しています。
SQL> SELECT * FROM "CORP.EMPLOYEES"; %SQL-F-SCHNOTDEF, Schema "CORP.RDB$CATALOG".LUFKIN is not defined SQL> SELECT * FROM "CORP.ADMINISTRATION".PERSONNEL.EMPLOYEES; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE ZIP_CODE SEX BIRTHDAY STATUS 00164 Toliver Alvin A 146 Parnell Place Chocorua NH 03817 M 1947-03-28 1 00165 Smith Terry D 120 Tenby Dr. Chocorua NH 03817 M 1954-05-15 2 SQL> -- SQL> -- By changing the default catalog from RDB$CATALOG to the SQL> -- catalog containing EMPLOYEES, you can avoid specifying the SQL> -- catalog name. SQL> -- SQL> SET CATALOG ADMINISTRATION; SQL> SELECT * FROM "CORP.PERSONNEL".EMPLOYEES; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE ZIP_CODE SEX BIRTHDAY STATUS 00164 Toliver Alvin A 146 Parnell Place Chocorua NH 03817 M 1947-03-28 1 00165 Smith Terry D 120 Tenby Dr. Chocorua NH 03817 M 1954-05-15 2 |
次の例では、データベース間でデータをコピーします。この例では別名を使用して両方のデータベースを宣言しているため、各データベースの表への参照は、それぞれのデータベースの別名で修飾する必要があります。この例の場合、両方のデータベースの表名は同じですが、別名によってターゲット・データベースの表とソース・データベースの同名の表を区別しています。この例は、tempと呼ばれるサンプルの人事データベースを、データを含めずにコピーして使用する手順を示しています。
SQL> -- Use the alias empty for the temp database: SQL> -- SQL> ATTACH 'ALIAS empty PATHNAME temp'; (1) SQL> -- SQL> -- Use the alias pers for the personnel database: SQL> -- SQL> ATTACH 'ALIAS pers PATHNAME personnel'; (1) SQL> -- SQL> -- Now declare a transaction, using the aliases to allow copying SQL> -- from the personnel database to the temp database: SQL> -- SQL> DECLARE TRANSACTION ON empty USING (READ WRITE) cont> AND ON pers USING (READ ONLY); (2) SQL> -- SQL> -- Finally, use an INSERT statement to copy data from the SQL> -- personnel database into the empty table, qualifying the table SQL> -- with the aliases: SQL> -- SQL> INSERT INTO empty.employees (3) cont> SELECT * FROM pers.employees; |
表名を使用して列名を修飾する例は、第2.2.4項を参照してください。
2.2.20 トリガー名
トリガー名は、CREATE TRIGGER文を使用して指定します。トリガー名は、マルチスキーマ・データベースのスキーマ内、または非マルチスキーマ・データベース内で一意である必要があります。
トリガーにより、指定した表の(INSERT文、DELETE文またはUPDATE文などの書込み操作による)更新の前後に行われるアクションを定義します。トリガーは、単一の表でのルールとみなすことができます。これは、特定のタイミングで特定タイプの更新に作用し、1つ以上のトリガー・アクションを実行します。
トリガーを使用すると、次のような便利なアクションを定義できます。