CREATE SYNONYM
CREATE SYNONYM文は、データベース・オブジェクトのパブリック・シノニムまたはプライベート・シノニムを作成します。シノニムは、データベース・オブジェクトの別名です。オブジェクトは、表、ビュー、シノニム、順序、PL/SQLストアド・プロシージャ、PL/SQLファンクション、PL/SQLパッケージ、マテリアライズド・ビューまたはキャッシュ・グループです。
プライベート・シノニムは、特定のユーザーが所有し、そのユーザーのスキーマ内に存在します。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるオブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。
パブリック・シノニムは、基礎となるオブジェクトに対する適切な権限がユーザーにあるかぎり、すべてのユーザーがアクセスできます。
CREATE SYNONYMはDDL文です。
シノニムは、次のSQL文で使用できます。
-
DML文:
SELECT、DELETE、INSERT、UPDATE、MERGE -
一部のDDL文:
GRANT、REVOKE、CREATE TABLE ... AS SELECT、CREATE VIEW ... AS SELECT、CREATE INDEX、DROP INDEX -
一部のキャッシュ・グループ文:
LOAD CACHE GROUP、UNLOAD CACHE GROUP、REFRESH CACHE GROUP、FLUSH CACHE GROUP
必要な権限
プライベート・シノニムを作成するには、CREATE SYNONYM(所有者の場合)またはCREATE ANY SYNONYM(非所有者の場合)。
パブリック・シノニムを作成するには、CREATE PUBLIC SYNONYM。
TimesTen Scaleoutでの使用
この文は、TimesTen Scaleoutでサポートされています。
SQL構文
CREATE [OR REPLACE] [PUBLIC] SYNONYM [Owner1.]synonym FOR [Owner2.]object
パラメータ
| パラメータ | 説明 |
|---|---|
|
|
シノニムがすでに存在する場合に再作成するには、 |
|
|
オブジェクトの先頭にスキーマ名が指定されていない場合のみ、オブジェクトへの参照を変換するときに、TimesTenでパブリック・シノニムが使用されます。 |
|
|
シノニムの所有者を指定します。 シノニムの名前を30バイト以内で指定します。 |
|
|
オブジェクトが配置される所有者を指定します。シノニムを作成する対象のオブジェクト名を指定します。 |
説明
-
スキーマ・オブジェクトは、そのシノニムの作成時に存在している必要はありません。
-
TimesTen組込みプロシージャと同じ名前のパブリック・シノニムは作成しないでください。
-
シノニムを使用するには、シノニムを使用する前に、シノニムによって別名が付けられるオブジェクトのユーザーに適切な権限が付与されている必要があります。
-
プライベート・シノニムの名前は、プライベート・シノニムと同じスキーマにある表、ビュー、順序、PL/SQLパッケージ、ファンクション、プロシージャおよびキャッシュ・グループと同じにすることはできません。
-
パブリック・シノニムの名前は、プライベート・シノニムやオブジェクト名と同じにすることができます。
-
問合せがOracle Databaseで実行される必要があるように
PassThrough属性が設定されている場合は、その問合せは変更されずにOracle Databaseに送信されます。問合せがキャッシュ・グループの表に対してシノニムを使用する場合、問合せが成功するためには、同じ名前のシノニムが対応するOracle Database表に定義されている必要があります。 -
オブジェクト名が、シノニムを使用できるDML文およびDDL文で使用される場合、オブジェクト名は次のように解決されます。
-
現在のスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。
-
パブリック・シノニム名との一致を検索します。一致が見つからない場合は、次に進みます。
-
SYSスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。
-
オブジェクトは存在しません。
TimesTenでは、一部のオブジェクトのパブリック・シノニムが
SYSスキーマ内に作成されます。パブリック・シノニムの名前はオブジェクト名と同じです。そのため、オブジェクト名解決のステップ2と3を入れ替えても、検索結果は変わりません。 -
-
アクティブ・スタンバイ・ペアのレプリケートされた環境で、
DDL_REPLICATION_LEVELが2以上の場合にアクティブ・データベースでCREATE SYNONYMを実行すると、シノニムはレプリケーション・スキームのすべてのデータベースにレプリケートされます。詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』の「アクティブ・スタンバイ・ペアでのDDL変更」を参照してください。
例
ユーザーttuserとして、jobs表のシノニムを作成します。シノニムを使用して情報を取得できることを確認します。SYS.USER_SYNONYMSシステム・ビューの内容を表示します。
Command> CREATE SYNONYM synjobs FOR jobs; Synonym created. Command> SELECT FIRST 2 * FROM jobs; < AC_ACCOUNT, Public Accountant, 4200, 9000 > < AC_MGR, Accounting Manager, 8200, 16000 > 2 rows found. Command> SELECT FIRST 2 * FROM synjobs; < AC_ACCOUNT, Public Accountant, 4200, 9000 > < AC_MGR, Accounting Manager, 8200, 16000 > 2 rows found. Command> SELECT * FROM sys.user_synonyms; < SYNJOBS, TTUSER, JOBS, <NULL> > 1 row found.
employees表のパブリック・シノニムを作成します。
Command> CREATE PUBLIC SYNONYM pubemp FOR employees; Synonym created.
pubempがパブリック・シノニムとしてSYS.ALL_SYNONYMSシステム・ビューに表示されることを確認します。
Command> SELECT * FROM sys.all_synonyms; < PUBLIC, TABLES, SYS, TABLES, <NULL> > ... < TTUSER, SYNJOBS, TTUSER, JOBS, <NULL> > < PUBLIC, PUBEMP, TTUSER, EMPLOYEES, <NULL> > 57 rows found.
terryスキーマのtab表のシノニムを作成します。シノニムを記述します。
Command> CREATE SYNONYM syntab FOR terry.tab;
Synonym created.
Command> DESCRIBE syntab;
Synonym TTUSER.SYNTAB:
For Table TERRY.TAB
Columns:
COL1 VARCHAR2 (10) INLINE
COL2 VARCHAR2 (10) INLINE
1 Synonyms found.
OR REPLACE句を使用して、employees表の別名となるように、synjobsシノニムを再定義します。synjobsと記述します。
Command> CREATE OR REPLACE synjobs FOR employees;
Synonym created.
Command> DESCRIBE synjobs;
Synonym TTUSER.SYNJOBS:
For Table TTUSER.EMPLOYEES
Columns:
*EMPLOYEE_ID NUMBER (6) NOT NULL
FIRST_NAME VARCHAR2 (20) INLINE
LAST_NAME VARCHAR2 (25) INLINE NOT NULL
EMAIL VARCHAR2 (25) INLINE UNIQUE NOT NULL
PHONE_NUMBER VARCHAR2 (20) INLINE
HIRE_DATE DATE NOT NULL
JOB_ID VARCHAR2 (10) INLINE NOT NULL
SALARY NUMBER (8,2)
COMMISSION_PCT NUMBER (2,2)
MANAGER_ID NUMBER (6)
DEPARTMENT_ID NUMBER (4)
1 Synonyms found.関連項目