すべてのプロダクト
Search
ドキュメントセンター

PolarDB:シノニムの作成と使用

最終更新日:Mar 28, 2026

シノニムは、データベースオブジェクトのエイリアスです。polardb.emp のように、すべての参照を完全なスキーマ名で修飾する代わりに、シノニムを一度定義し、すべての DML ステートメントと DDL ステートメントで短い名前を使用できます。

PolarDB for Oracle は、以下のオブジェクトタイプに対してシノニムをサポートしています。

  • テーブル

  • ビュー

  • シーケンス

  • プロシージャ

  • ファンクション

  • その他のシノニム

シノニムの仕組み

シノニムは、単一の非修飾名を、別のスキーマ (またはデータベースリンクを介したデータベース) 内のターゲットオブジェクトにマッピングします。PolarDB for Oracle がシノニムを参照する SQL ステートメントを解決すると、基になるオブジェクトを透過的に置き換えます。

主な動作:

  • 遅延バインディング: シノニムを作成するときに、ターゲットオブジェクトとスキーマが存在する必要はありません。シノニムは、参照されるオブジェクトまたはスキーマを削除した場合にのみ無効になります。

  • 明示的な削除: ターゲットオブジェクトを削除しても、シノニムは削除されません。DROP SYNONYM を使用してシノニムを明示的に削除します。

  • 権限チェック: シノニムはオブジェクト権限の代替ではありません。ユーザーがシノニムを参照する文を実行すると、PolarDB for Oracle はシノニム自体ではなく、基になるオブジェクトに対してそのユーザーの権限をチェックします。

  • 名前解決: 非修飾シノニム名は、検索パスを使用して解決されます。2 つのシノニムが同じ名前を共有している場合、検索パスで最初に見つかったものが優先されます。public が検索パスに含まれている場合、パブリックシノニムはスキーマ修飾なしでアクセスできます。

構文

CREATE SYNONYM

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

OR REPLACE を使用すると、既存のシノニム定義を最初に削除することなく上書きできます。

PUBLIC を使用すると、public スキーマにシノニムを作成し、検索パスに public が含まれるすべてのユーザーがスキーマ修飾なしでアクセスできるようにします。以下の 2 つの文は同等です。

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

DROP SYNONYM

DROP [PUBLIC] SYNONYM [schema.]syn_name;

PUBLIC を使用して、public スキーマに存在するシノニムを削除します。

DROP PUBLIC SYNONYM syn_name;

パラメータ

パラメータ説明
syn_nameシノニムの名前。スキーマ内で一意である必要があります。
schemaシノニムが存在するスキーマ。省略した場合、PolarDB for Oracle は検索パスで最初に見つかった既存のスキーマにシノニムを作成します。
object_nameターゲットオブジェクトの名前。
object_schemaターゲットオブジェクトが存在するスキーマ。

シノニムの作成

personnel という名前のシノニムを polardb.emp テーブルに対して作成します。

CREATE SYNONYM personnel FOR polardb.emp;

スキーマが指定されていないため、PolarDB for Oracle は検索パスで最初に見つかった既存のスキーマにシノニムを作成します。現在の検索パスを確認するには、次のようにします。

SHOW SEARCH_PATH;
      search_path
-----------------------
 development,accounting
(1 row)

development スキーマが存在しない場合、シノニムは accounting スキーマに作成されます。

DML ステートメントでのシノニムの使用

シノニムを作成した後、完全修飾テーブル名の代わりに、任意の DML ステートメントでそれを使用します。

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)

シノニムの削除

personnel シノニムを削除します。

DROP SYNONYM personnel;

検索パスに同じ名前のシノニムが 2 つある場合は、スキーマ名を含めて正しいものを対象とします。

DROP SYNONYM accounting.personnel;