シノニムは、データベースオブジェクトのエイリアスです。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;