ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

## 2.2.19 表名およびビュー名

表およびビューには、CREATE TABLE文およびCREATE VIEW文で名前を付けます。これらのSQL文およびその他のSQL文では、CREATE文で表およびビューに付けた名前を別名で修飾できます。また、表名およびビュー名で列名を修飾できます。

データベースのマルチスキーマ・オプションが有効な場合は、表名およびビュー名をスキーマ名とカタログ名、または別名で修飾することもできます。別名と表名の組合せを二重引用符で囲み、使用する言語をANSI/ISO SQL規格に設定するか、またはANSI/ISO SQL規格の引用ルールを使用する必要があります。言語および引用ルールの詳細は、「SET DIALECT文」および「SET QUOTING RULES文」を参照してください。別名CORP、カタログADMINISTRATION、スキーマPERSONNELであるデータベースにあるEMPLOYEES表の有効な名前を次に示します。

- "CORP.ADMINISTRATION".PERSONNEL.EMPLOYEES

- "CORP.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;

1. ATTACH文を使用して、EMPTYおよびPERSという別名を指定します。

2. DECLARE TRANSACTION文で別名を使用して、単一のトランザクションで両方のデータベースを使用します。

3. INSERT文でこれらの別名を使用して、人事データベースのEMPLOYEES表とtempデータベースのEMPLOYEES表を区別します。

表名を使用して列名を修飾する例は、第2.2.4項を参照してください。

## 2.2.20 トリガー名

トリガー名は、CREATE TRIGGER文を使用して指定します。トリガー名は、マルチスキーマ・データベースのスキーマ内、または非マルチスキーマ・データベース内で一意である必要があります。

トリガーにより、指定した表の（INSERT文、DELETE文またはUPDATE文などの書込み操作による）更新の前後に行われるアクションを定義します。トリガーは、単一の表でのルールとみなすことができます。これは、特定のタイミングで特定タイプの更新に作用し、1つ以上のトリガー・アクションを実行します。

トリガーを使用すると、次のような便利なアクションを定義できます。

- カスケード削除
  1つの表内の行を削除すると、キー値によって最初の表に関連付けられている他の表の行も削除されます。

- カスケード更新
  1つの表内の行を更新すると、キー値によって最初の表に関連付けられている他の表の行も更新されます。通常、これらの更新はキー値自体に限定されています。

- 加算更新
  1つの表内の行を更新すると、別の表内の行の値が増減し、更新されます。

- 非表示削除
  表内の行をデータベースでは使用されないパラレル表に移動することによって削除します。

- 監査ログ
  行が挿入、更新または削除された時間およびその実行者が記録されます。