用途
CREATE
SYNONYM
文を使用すると、シノニムを作成できます。シノニムとは、表、ビュー、順序、演算子、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、Javaクラス・スキーマ・オブジェクト、ユーザー定義オブジェクト型または別のシノニムに付ける別名です。シノニムによってシノニムのターゲット・オブジェクトへの依存関係が設定され、ターゲット・オブジェクトが変更または削除されるとシノニムも無効になります。
シノニムによって、データの独立性および位置の透過性を実現できます。シノニムを使用した場合、どのユーザーが表やビューを所有しているか、どのデータベースに表やビューが格納されているかに関係なく、アプリケーションは変更なしで機能します。ただし、シノニムはデータベース・オブジェクトに対する権限にかわるものではありません。シノニムを使用するユーザーに対して、適切な権限をあらかじめ付与しておく必要があります。
シノニムを参照できるDML文は、SELECT
、INSERT
、UPDATE
、DELETE
、FLASHBACK
TABLE
、EXPLAIN
PLAN
およびLOCK
TABLE
です。
シノニムを参照できるDDL文は、AUDIT
、NOAUDIT
、GRANT
、REVOKE
およびCOMMENT
です。
関連項目: シノニムの概要については、『Oracle Database概要』を参照してください。 |
前提条件
自分のスキーマ内にプライベート・シノニムを作成する場合は、CREATE
SYNONYM
システム権限が必要です。
他のユーザーのスキーマ内にプライベート・シノニムを作成する場合は、CREATE
ANY
SYNONYM
システム権限が必要です。
PUBLIC
シノニムを作成する場合は、CREATE
PUBLIC
SYNONYM
システム権限が必要です。
セマンティクス
OR REPLACE
OR
REPLACE
を指定すると、既存のシノニムを再作成できます。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。
シノニムの置換の制限事項: OR
REPLACE
句は、依存表または依存する有効なユーザー定義オブジェクト型を持つ型シノニムに対して使用できません。
PUBLIC
を指定すると、パブリック・シノニムを作成できます。パブリック・シノニムには、すべてのユーザーがアクセスできます。ただし、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が必要です。
オブジェクトの先頭にスキーマ名が指定されておらず、オブジェクトの後にデータベース・リンクが指定されていない場合のみ、オブジェクトへの参照を変換するときに、パブリック・シノニムが使用されます。
この句を指定しない場合、シノニムはプライベートです。プライベート・シノニム名は、スキーマ内で一意である必要があります。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるデータベース・オブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。
パブリック・シノニムの注意事項: パブリック・シノニムには、次の注意事項があります。
パブリック・シノニムを作成した後、依存表または依存する有効なユーザー定義オブジェクト型が存在する場合、依存オブジェクトと同じスキーマ内には、そのシノニムと同じ名前で別のデータベース・オブジェクトは作成できません。
既存のスキーマと同じ名前のパブリック・シノニムを作成しないでください。同じ名前のパブリック・シノニムを作成すると、その名前が使用されるすべてのPL/SQLユニットが無効になります。
schema
シノニムを含めるスキーマを指定します。schema
を省略した場合、自分のスキーマ内にシノニムが作成されます。PUBLIC
を指定した場合、スキーマは指定できません。
synonym
作成するシノニムの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。
注意: シノニム名は、30バイトを超える場合も作成および削除できます。ただし、Java名でない場合は他のSQLコマンドで機能しません。30バイトを超える名前は、データ・ディクショナリに格納するために不確定で短い文字列に変換されます。 |
FOR句
シノニムを作成するオブジェクトを指定します。シノニムを作成するスキーマ・オブジェクトには、次のものがあります。
表またはオブジェクト表
ビューまたはオブジェクト・ビュー
順序
ストアド・プロシージャ、ファンクションまたはパッケージ
マテリアライズド・ビュー
Javaクラス・スキーマ・オブジェクト
ユーザー定義オブジェクト型
シノニム
スキーマ・オブジェクトは、現在存在している必要はなく、スキーマ・オブジェクトへのアクセス権限も必要ありません。
FOR句の制限事項: スキーマ・オブジェクトは、パッケージに含めることはできません。
schema オブジェクトが含まれているスキーマを指定します。オブジェクトにschema
を指定しなかった場合、そのスキーマ・オブジェクトは自分のスキーマ内にあるとみなされます。
リモート・データベース上のプロシージャやファンクションに対するシノニムを作成する場合、このCREATE文で
schemaを指定する必要があります。または、オブジェクトが存在するデータベースにローカル・パブリック・シノニムを作成することもできます。ただし、その後は、プロシージャやファンクションの後続のコールすべてにデータベース・リンクを組み込む必要があります。
dblink データベース・リンクを完全に指定するか、またはデータベース・リンクの一部を指定すると、スキーマ・オブジェクトが格納されているリモート・データベース上のオブジェクトのシノニムを作成できます。dblink
を指定して、schema
を省略した場合、シノニムは、データベース・リンクで指定されたスキーマ内のオブジェクトを参照します。リモート・データベースのオブジェクトが含まれているスキーマを指定することをお薦めします。
dblink
を省略した場合、オブジェクトがローカル・データベース上にあるものとみなされます。
データベース・リンクの制限事項: dblink
は、Javaクラス・シノニムに対して指定できません。
関連項目:
|
例
CREATE SYNONYMの例: 次の文は、スキーマhr
内の表locations
に対してシノニムoffices
を定義します。
CREATE SYNONYM offices FOR hr.locations;
remote
データベース上のスキーマhr
内のemployees
表に対してPUBLIC
シノニムを作成するには、次の文を発行します。
CREATE PUBLIC SYNONYM emp_table FOR hr.employees@remote.us.example.com;
別のスキーマ内に基礎となるオブジェクトが含まれている場合は、基礎となるオブジェクトと同じ名前をシノニムに指定することもできます。
Oracle Databaseによるシノニムの変換例 Oracle Databaseは、オブジェクトの参照を、PUBLIC
シノニム・レベルで変換する前に、スキーマ・レベルで変換しようとします。たとえば、スキーマoe
とsh
の両方にcustomers
という名前の表が存在するとします。次の例では、ユーザーSYSTEM
が、oe.customers
に対してcustomers
という名前のPUBLIC
シノニムを作成します。
CREATE PUBLIC SYNONYM customers FOR oe.customers;
ユーザーsh
が次の文を発行すると、sh.customers
から行数が戻されます。
SELECT COUNT(*) FROM customers;
oe.customers
から行数を取得するには、ユーザーsh
は、customers
の前にスキーマ名を指定する必要があります。(ユーザーsh
は、oe.customers
に対するSELECT権限も持っている必要があります。)
SELECT COUNT(*) FROM oe.customers;
ユーザーhr
のスキーマにcustomers
という名前のオブジェクトは存在しないが、hr
がoe.customers
に対するSELECT権限を持つ場合、hr
は、パブリック・シノニムcustomers
を使用して、oe
のスキーマ内のcustomers
表にアクセスできます。
SELECT COUNT(*) FROM customers;