日本語PDF

15.3 CREATE SYNONYM

目的

CREATE SYNONYM文を使用すると、シノニムを作成できます。シノニムとは、表、ビュー、順序、演算子、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、Javaクラス・スキーマ・オブジェクト、ユーザー定義オブジェクト型または別のシノニムに付ける別名です。シノニムによってシノニムのターゲット・オブジェクトへの依存関係が設定され、ターゲット・オブジェクトが変更または削除されるとシノニムも無効になります。

シノニムによって、データの独立性および位置の透過性を実現できます。シノニムを使用した場合、どのユーザーが表やビューを所有しているか、どのデータベースに表やビューが格納されているかに関係なく、アプリケーションは変更なしで機能します。ただし、シノニムはデータベース・オブジェクトに対する権限にかわるものではありません。シノニムを使用するユーザーに対して、適切な権限をあらかじめ付与しておく必要があります。

シノニムを参照できるDML文は、SELECTINSERTUPDATEDELETEFLASHBACK TABLEEXPLAIN PLANLOCK TABLEMERGEおよびCALLです。

シノニムを参照できるDDL文は、AUDITNOAUDITGRANTREVOKEおよびCOMMENTです。

関連項目:

シノニムの概要については、『Oracle Database概要』を参照してください。

前提条件

自分のスキーマ内にプライベート・シノニムを作成する場合は、CREATE SYNONYMシステム権限が必要です。

他のユーザーのスキーマ内にプライベート・シノニムを作成する場合は、CREATE ANY SYNONYMシステム権限が必要です。

PUBLICシノニムを作成する場合は、CREATE PUBLIC SYNONYMシステム権限が必要です。

構文

create_synonym::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のシノニムを再作成できます。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。

シノニムの置換の制限事項

OR REPLACE句は、依存表または依存する有効なユーザー定義オブジェクト型を持つ型シノニムに対して使用できません。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプSYNONYMのエディショニングが有効化されたときに、そのシノニムをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。プライベート・シノニムの場合、デフォルトはEDITIONABLEです。パブリック・シノニムの場合、デフォルトはNONEDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

PUBLIC

PUBLICを指定すると、パブリック・シノニムを作成できます。パブリック・シノニムには、すべてのユーザーがアクセスできます。ただし、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が必要です。

オブジェクトの先頭にスキーマ名が指定されておらず、オブジェクトの後にデータベース・リンクが指定されていない場合のみ、オブジェクトへの参照を変換するときに、パブリック・シノニムが使用されます。

この句を指定しない場合、シノニムはプライベートです。プライベート・シノニム名は、スキーマ内で一意である必要があります。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるデータベース・オブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。

パブリック・シノニムの注意事項

パブリック・シノニムには、次の注意事項があります。

  • パブリック・シノニムを作成した後、依存表または依存する有効なユーザー定義オブジェクト型が存在する場合、依存オブジェクトと同じスキーマ内には、そのシノニムと同じ名前で別のデータベース・オブジェクトは作成できません。

  • 既存のスキーマと同じ名前のパブリック・シノニムを作成しないでください。同じ名前のパブリック・シノニムを作成すると、その名前が使用されるすべてのPL/SQLユニットが無効になります。

schema

シノニムを含めるスキーマを指定します。schemaを省略した場合、自分のスキーマ内にシノニムが作成されます。PUBLICを指定した場合、スキーマは指定できません。

synonym

作成するシノニムの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

注意:

シノニム名の最大長には、次のルールがあります。

  • COMPATIBLE初期化パラメータが12.2以上の値に設定されている場合、シノニム名の最大長は128バイトです。データベースでは、129から4000バイトの長さのシノニムを作成および削除できます。ただし、これらのより長いシノニム名がJava名を表す場合を除いて、他のSQLコマンドでは機能しません。

  • COMPATIBLE初期化パラメータが12.2より小さい値に設定されている場合、シノニム名の最大長は30バイトです。データベースでは、31から128バイトの長さのシノニムを作成および削除できます。ただし、これらのより長いシノニム名がJava名を表す場合を除いて、他のSQLコマンドでは機能しません。

より長いシノニム名は、データ・ディクショナリに格納するために不確定で短い文字列に変換されます。

関連項目:

「CREATE SYNONYM: 例」および「Oracle Databaseによるシノニムの変換: 例」を参照してください。

SHARING

この句は、アプリケーション・ルートにシノニムを作成する場合にのみ適用されます。このタイプのシノニムはアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。シノニムの共有方法を決定するには、次の共有属性のいずれかを指定します。

  • METADATA - メタデータ・リンクはシノニムのメタデータを共有しますが、そのデータは各コンテナに固有です。このタイプのシノニムは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。

  • NONE - シノニムは共有されません。

この句を省略すると、データベースでは、DEFAULT_SHARING初期化パラメータの値を使用して、シノニムの共有属性を決定します。DEFAULT_SHARING初期化パラメータに値が含まれていない場合、デフォルトはMETADATAです。

シノニムの共有属性は、作成後には変更できません。

関連項目:

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シノニム・レベルで変換する前に、スキーマ・レベルで変換しようとします。たとえば、スキーマoeshの両方に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という名前のオブジェクトは存在しないが、hroe.customersに対するSELECT権限を持つ場合、hrは、パブリック・シノニムcustomersを使用して、oeのスキーマ内のcustomers表にアクセスできます。

SELECT COUNT(*) FROM customers;