シノニムは、SQL 文で別のデータベースオブジェクトの参照に使用できる識別子です。
構文
CREATE SYNONYM 文を使用して、シノニムを作成します。 構文は次のとおりです。
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema。] syn_name FOR object schema.object name; CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema。] syn_name
FOR object_schema.object_name[@dblink_name];
シノニムを削除するには、DROP SYNONYM 文を使用します。 構文は次のとおりです。
DROP [PUBLIC] SYNONYM [schema.] syn_name;
パラメーター
パラメーター | 説明 |
---|---|
syn_name | シノニムの名前。 シノニムの名前は、スキーマ内で一意である必要があります。 |
schema | シノニムが存在するスキーマの名前。
注 スキーマ名を指定しない場合、シノニムは検索パスの最初の既存のスキーマに作成されます。
|
object_name | オブジェクトの名前。 |
object_schema | オブジェクトが存在するスキーマの名前。 |
説明
シノニムは、SQL 文で別のデータベースオブジェクトを参照するために使用できる識別子です。
シノニムは、通常、データベースオブジェクトを SQL 文で適切に参照するためにスキーマ名による完全修飾を必要とする場合に役立ちます。 そのオブジェクトに対して定義されたシノニムは、単一の非修飾名への参照を単純化します。
- 表
- ビュー
- シーケンス
- プロシージャ
- 関数
- タイプ
- その他のシノニム
シノニムを作成するときに、参照されるスキーマも参照されるオブジェクトも存在していてはなりません。 シノニムは、存在しないオブジェクトまたはスキーマを参照する場合があります。 参照されるオブジェクトまたはスキーマを削除すると、シノニムは無効になります。 シノニムを明示的に削除する必要があります。
他のスキーマオブジェクトと同様に、Oracle と互換性のある POLARDB は、検索パスを使用して、修飾されていないシノニム名を解決します。 同じ名前のシノニムが 2 つある場合、シノニムへの非修飾参照は、検索パスで指定された名前を持つ最初のシノニムに解決されます。 public が検索パスにある場合、その名前を修飾せずにそのスキーマのシノニムを参照できます。
Oracle と互換性のある POLARDB が SQL 文を実行すると、現在のユーザーの権限が、シノニムの基礎となるデータベースオブジェクトに対してチェックされます。 ユーザーがそのオブジェクトに対する適切な権限を持っていない場合、SQL 文は失敗します。
例
- シノニムの作成
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 文でスキーマ修飾されていない限り、シノニムは検索パスの最初の既存のスキーマに作成されます。 次の文を実行すると、検索パスを表示できます。
SHOW SEARCH_PATH; search_path ----------------------- development,accounting (1 row)
この例では、development というスキーマが存在しない場合、accounting というスキーマにシノニムが作成されます。
enterprisedb スキーマの emp テーブルは、personnel シノニムを使用して、任意の DDL または 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)
- シノニムの削除
スキーマで修飾できる他のオブジェクトと同様に、検索パスに同じ名前の 2 つのシノニムがある場合があります。 削除するシノニムの名前を明確にするために、スキーマ名を含めます。 DROP SYNONYM 文でシノニムがスキーマ修飾されていない限り、Oracle と互換性のある POLARDB は、検索パスで見つかったシノニムの最初のインスタンスを削除します。
オプションで PUBLIC 句を含めると、パブリックスキーマに存在するシノニムを削除します。 Oracle データベースと互換性のある DROP PUBLIC SYNONYM 文は、パブリックスキーマに存在するシノニムを削除します。
DROP PUBLIC SYNONYM syn_name;
次の例は、personnel シノニムを削除します。
DROP SYNONYM personnel;