シノニム は、SQL 文で別のデータベースオブジェクトを参照するために使用できる識別子です。 データベースオブジェクトを SQL 文で正しく参照するために、スキーマ名による完全修飾を必要とするシナリオで役立ちます。 オブジェクトに対して定義されたシノニムは、単一の非修飾名への参照を単純化します。

Oracle と互換性のある PolarDB データベースでは、次のオブジェクトでシノニムがサポートされています。

  • テーブル
  • ビュー
  • 具体化されたビュー
  • シーケンス
  • プロシージャ
  • 関数
  • タイプ
  • データベースリンクを介してアクセス可能なオブジェクト
  • その他のシノニム

参照されるスキーマまたはオブジェクトは、シノニムの作成時に存在する場合があります。 シノニムは、存在しないオブジェクトまたはスキーマを参照する場合があります。 参照されているオブジェクトまたはスキーマを削除すると、シノニムは無効になります。 シノニムを削除するには、明示的に削除する必要があります。

他のスキーマオブジェクトと同様に、Oracle と互換性のある PolarDB データベースでは、検索パスを使用して修飾されていないシノニム名を解決します。 同じ名前のシノニムが 2 つある場合、シノニムへの非修飾参照は、検索パスで指定された名前の最初のシノニムに解決されます。 検索パスに public がある場合は、名前を修飾せずにスキーマ内のシノニムを参照できます。

Oracle と互換性のある PolarDBデータベースでは、SQL 文を実行すると、シノニムの基になるデータベースオブジェクトに対する現在のユーザーの権限がチェックされます。 ユーザーがそのオブジェクトに対する適切な権限を持っていない場合、SQL 文は失敗します。

シノニムの作成

CREATE SYNONYM 文を使用して、シノニムを作成します。 構文は次のとおりです。

CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]syn_name
       FOR object_schema.object_name[@dblink_name];
表 1. パラメーター
パラメーター 説明 
syn_name シノニムの名前。 シノニム名は、スキーマ内で一意である必要があります。
schema シノニムが配置されているスキーマの名前。 スキーマ名を指定しない場合、シノニムは検索パス内の最初の既存のスキーマに作成されます。
object_name オブジェクトの名前。
object_schema オブジェクトが配置されているスキーマの名前。
dblink_name ターゲットオブジェクトへのアクセスに使用するデータベースリンクの名前。

既存のシノニム定義を新しいシノニム定義で置き換えるには、REPLACE 句を含める必要があります。

パブリックスキーマにシノニムを作成するには、PUBLIC 句を含める必要があります。 Oracle データベースと互換性のある CREATE PUBLIC SYNONYM 文は、パブリックスキーマにあるシノニムを作成します。

CREATE [OR REPLACE] PUBLIC SYNONYM syn_name FOR object_schema.object_name;

次の例は簡略版です。

CREATE [OR REPLACE] SYNONYM public.syn_name FOR object_schema.object_name;

次の例では、enterprisedb.emp テーブルを参照する、personnel という名前のシノニムを作成します。

CREATE SYNONYM personnel FOR enterprisedb.emp;

シノニムが CREATE SYNONYM 文でスキーマ修飾されていない限り、シノニムは検索パス内の最初の既存スキーマに作成されます。 次の SQL 文を実行すると、検索パスを表示できます。

SHOW SEARCH_PATH;

      search_path
-----------------------
 development,accounting
(1 row)

この例では、development という名前のスキーマが存在しない場合、accounting という名前のスキーマにシノニムが作成されます。

personnel というシノニムを使用して、enterprisedb スキーマの emp テーブルを任意の DDL または DML SQL 文で参照できます。

INSERT INTO personnel VALUES (8142,'ANDERSON','CLERK',7902,'17-DEC-06',1300,NULL,20);

SELECT * FROM personnel;

 empno |  ename   |    job    | mgr  |      hiredate      |   sal   |  comm   | deptno
-------+----------+-----------+------+--------------------+---------+---------+--------
  7369 | SMITH    | CLERK     | 7902 | 17-DEC-80 00:00:00 |  800.00 |         |     20
  7499 | ALLEN    | SALESMAN  | 7698 | 20-FEB-81 00:00:00 | 1600.00 |  300.00 |     30
  7521 | WARD     | SALESMAN  | 7698 | 22-FEB-81 00:00:00 | 1250.00 |  500.00 |     30
  7566 | JONES    | MANAGER   | 7839 | 02-APR-81 00:00:00 | 2975.00 |         |     20
  7654 | MARTIN   | SALESMAN  | 7698 | 28-SEP-81 00:00:00 | 1250.00 | 1400.00 |     30
  7698 | BLAKE    | MANAGER   | 7839 | 01-MAY-81 00:00:00 | 2850.00 |         |     30
  7782 | CLARK    | MANAGER   | 7839 | 09-JUN-81 00:00:00 | 2450.00 |         |     10
  7788 | SCOTT    | ANALYST   | 7566 | 19-APR-87 00:00:00 | 3000.00 |         |     20
  7839 | KING     | PRESIDENT |      | 17-NOV-81 00:00:00 | 5000.00 |         |     10
  7844 | TURNER   | SALESMAN  | 7698 | 08-SEP-81 00:00:00 | 1500.00 |    0.00 |     30
  7876 | ADAMS    | CLERK     | 7788 | 23-MAY-87 00:00:00 | 1100.00 |         |     20
  7900 | JAMES    | CLERK     | 7698 | 03-DEC-81 00:00:00 |  950.00 |         |     30
  7902 | FORD     | ANALYST   | 7566 | 03-DEC-81 00:00:00 | 3000.00 |         |     20
  7934 | MILLER   | CLERK     | 7782 | 23-JAN-82 00:00:00 | 1300.00 |         |     10
  8142 | ANDERSON | CLERK     | 7902 | 17-DEC-06 00:00:00 | 1300.00 |         |     20
(15 rows)

シノニムの削除

シノニムを削除するには、DROP SYNONYM 文を使用します。 構文は次のとおりです。

DROP [PUBLIC] SYNONYM [schema.] syn_name
表 2. パラメーター
パラメーター 説明
syn_name シノニムの名前。 シノニム名は、スキーマ内で一意である必要があります。
schema シノニムが配置されているスキーマの名前。

スキーマで修飾できる他のオブジェクトと同様に、検索パスに同じ名前の 2 つのシノニムがある場合があります。 削除するシノニムの名前を明確にするには、スキーマ名を含める必要があります。 DROP SYNONYM 文でシノニムがスキーマ修飾されていない限り、Oracle と互換性のある PolarDB データベースは、検索パスで見つかった最初のシノニムのインスタンスを削除します。

PUBLIC 句を含めて、パブリックスキーマにあるシノニムを削除できます。 Oracle データベースと互換性がある DROP PUBLIC SYNONYM 文では 、次の構文を使用して、パブリックスキーマにあるシノニムを削除します。

DROP PUBLIC SYNONYM syn_name;

次の例は、personnel という名前のシノニムを削除する方法を示しています。

DROP SYNONYM personnel;