プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
12cリリース1 (12.1)
B71278-13
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

データベース・オブジェクト名および修飾子

データベース・オブジェクトの中には、複数のコンポーネントから構成されていて、各コンポーネントに名前を付けることが可能または必須のものがあります(たとえば、表またはビュー内の列、索引および表のパーティションとサブパーティション、表の整合性制約、パッケージ内に格納されるオブジェクト(プロシージャやストアド・ファンクションなど))。この項の内容は次のとおりです。


注意:

Oracleでは、暗黙的に生成されるデータベース・オブジェクトとサブオブジェクトには「SYS_」で始まるシステム生成名を使用し、Oracleが提供する一部のオブジェクトには、「ORA_」で始まる名前を使用します。名前解決での競合を避けるため、これらの接頭辞は明示的に指定するデータベース・オブジェクト名やサブオブジェクト名では使用しないでください。

データベース・オブジェクトのネーミング規則

すべてのデータベース・オブジェクトには、名前があります。SQL文では、引用識別子または非引用識別子を使用して、オブジェクトの名前を表します。

  • 引用識別子は、二重引用符(")で囲みます。引用識別子を使用してスキーマ・オブジェクトを指定した場合、そのオブジェクトを参照するときは、必ず二重引用符を使用します。

  • 非引用識別子の前後に句読点は付けません。

データベース・オブジェクトを指定する場合、引用識別子または非引用識別子を使用できます。データベース名、グローバル・データベース名およびデータベース・リンク名では大/小文字は区別されませんが、大文字として保存されます。このような名前を引用識別子として指定する場合、引用符は特に警告もなく無視されます。ユーザー名とパスワードのネーミング規則の詳細は、「CREATE USER」を参照してください。


注意:

データベース・オブジェクト名には引用識別子を使用しないことをお薦めします。SQL*Plusではこのような引用識別子は許可されていますが、データベース・オブジェクトを管理する他のツールでは有効でない場合があります。

特に指定がないかぎり、次の規則は、引用識別子と非引用識別子の両方に適用されます。

  1. 名前は、1から30バイトの長さで指定する必要があります。ただし、次の2つは例外です。

    • データベースの名前は、8バイトまでに制限されています。

    • データベース・リンクの名前は、128バイトまで指定できます。

    識別子にピリオドで区切られた複数の部分が含まれる場合、各属性の長さは最大30バイトにできます。セパレータのそれぞれのピリオド、および取り囲んでいる二重引用符は1バイトとしてカウントされます。たとえば、次のように列を識別するとします。

    "schema"."table"."column"
    

    スキーマ名、表名、列名の長さはそれぞれ30バイトです。各引用符やピリオドはシングルバイト文字のため、この例での識別子の総バイト長は、最大98バイトになります。

  2. 非引用識別子にOracle SQLの予約語は使用できません。引用識別子には、予約語を使用できますが、お薦めしません。

    名前は、データベース・オブジェクトにアクセスするために使用するOracle製品固有のその他の予約語によって、さらに制限されることもあります。


    注意:

    予約語ROWIDは、この規則の例外です。大文字のROWIDは、引用符の有無にかかわらず、列名としては使用できません。ただし、大文字の単語は列名以外の引用識別子として使用でき、小文字が含まれる単語(たとえば"Rowid"や"rowid")は、列名をはじめとする任意の引用識別子として使用できます。


    関連項目:

    • Oracle SQLの予約語のすべてのリストは、「Oracle SQLの予約語」を参照してください。

    • 製品の予約語のリストについては、『Oracle Database PL/SQL言語リファレンス』などの各製品のマニュアルを参照してください。


  3. OracleのSQL言語には、特別な意味を持つ文字が含まれています。これらの文字には、データ型、スキーマ名、ファンクション名、ダミーのシステム表DUALおよびキーワード(DIMENSIONSEGMENTALLOCATEDISABLEなど、SQL文中の大文字の単語)が含まれます。これらの文字は予約語ではありません。ただし、Oracleは固有の方法でこれらの文字を内部的に使用します。したがって、これらの文字をオブジェクトおよびオブジェクトの部分の名前として使用した場合、使用しているSQL文が読みにくくなり、予期しない結果になることがあります。

    特に、SYS_またはORA_で始まる文字をスキーマ・オブジェクト名として使用しないでください。また、SQL組込みファンクションの名前を、スキーマ・オブジェクトまたはユーザー定義ファンクションの名前として使用しないでください。


    関連項目:


  4. 異なるプラットフォームおよびオペレーティング・システム間では、ASCIIレパートリからの文字を使用することで最適な互換性を得ることができます。データベース名、グローバル・データベース名、データベース・リンク名には、これらの文字を使用してください。マルチテナント・コンテナ・データベース(CDB)内の共通ユーザーと共通ロールの名前には、ASCIIレパートリにある文字のみを使用してください。

  5. パスワードにマルチバイト文字を含めることができます。

  6. 非引用識別子は、データベース・キャラクタ・セットのアルファベット文字で開始する必要があります。引用識別子の開始文字には、任意の文字を使用できます。

  7. 非引用識別子には、データベース・キャラクタ・セットの英数字、アンダースコア(_)、ドル記号($)およびシャープ記号(#)のみ含めることができます。データベース・リンクの名前には、ピリオド(.)とアットマーク(@)を含めることもできます。

    引用識別子には、すべての文字、句読点および空白を使用できます。ただし、引用識別子と非引用識別子のいずれにも、二重引用符またはNULL文字(たとえば\0)は使用できません。

  8. ネームスペース内では、2つのオブジェクトに同じ名前を付けることはできません。

    次のスキーマ・オブジェクトは、1つのネームスペースを共有します。

    • パッケージ

    • プライベート・シノニム

    • 順序

    • スタンドアロン・プロシージャ

    • スタンドアロン・ストアド・ファンクション

    • ユーザー定義演算子

    • ユーザー定義型

    • ビュー

    次の各スキーマ・オブジェクトは、固有のネームスペースを持ちます。

    • クラスタ

    • 制約

    • データベース・トリガー

    • ディメンション

    • 索引

    • マテリアライズド・ビュー(マテリアライズド・ビューを作成すると、データベースで同じ名前の内部表が作成されます。この表は、スキーマ内の他の表と同じネームスペースを持ちます。このため、スキーマに同じ名前の表とマテリアライズド・ビューを含めることはできません。)

    • プライベート・データベース・リンク

    表および順序が同じネームスペースにあるため、同じスキーマの表および順序が同じ名前を持つことはできません。ただし、表と索引は異なるネームスペースに存在します。このため、同じスキーマ内の表と索引には、同じ名前を付けることができます。

    データベース内の各スキーマには、その中のオブジェクトのために固有のネームスペースがあります。たとえば、異なるスキーマ内の2つの表は異なるネームスペースに存在し、同じ名前を付けることができます。

    次の各非スキーマ・オブジェクトは、固有のネームスペースを持ちます。

    • エディション

    • パラメータ・ファイル(PFILE)およびサーバー・パラメータ・ファイル(SPFILE)

    • プロファイル

    • パブリック・データベース・リンク

    • パブリック・シノニム

    • 表領域

    • ユーザー・ロール

    これらのネームスペース内のオブジェクトはスキーマに含まれないため、これらのネームスペースはデータベース全体で使用されます。

  9. 引用符のない識別子は、大/小文字が区別されません。引用符のない識別子は大文字として解析されます。引用識別子では、大文字と小文字が区別されます。

    名前を二重引用符で囲むことによって、同じネームスペース内の異なるオブジェクトに対して次の名前を指定できます。

    "employees"
    "Employees"
    "EMPLOYEES"
    

    ただし、Oracleは次の名前を同じ名前として解析するため、同じネームスペース内の異なるオブジェクトには、次の名前を使用できません。

    employees
    EMPLOYEES
    "EMPLOYEES"
    
  10. Oracleが識別子を大文字で格納または比較する場合、識別子の各文字の大文字形式は、データベース・キャラクタ・セットの大文字化規則を適用することによって決定されます。セッション設定NLS_SORTによって決定される言語固有の規則は考慮されません。この動作は、ファンクションNLS_UPPERではなく、SQLファンクションUPPERを識別子に適用することに対応しています。

    データベース・キャラクタ・セットの大文字化規則によって、特定の自然言語としては不適切な結果となる場合があります。たとえば、データベース・キャラクタ・セットの大文字化規則に従うと、ドイツ語で使用される小文字のシャープs("ß")に大文字形式はありません。この文字は、識別子が大文字に変換されても変更されませんが、期待されるドイツ語での大文字形式は、2つの大文字のSの連続("SS")です。同様に、小文字iの大文字形式は、データベース・キャラクタ・セットの大文字化規則に従うと大文字Iです。ただし、トルコ語およびアゼルバイジャン語で予期される大文字形式は、上に点が付いた大文字Iです。

    データベース・キャラクタ・セットの大文字化規則では、識別子はセッションのすべての言語構成で同様に解釈されます。識別子が特定の自然言語で正しく表示されるようにする場合は、引用符で囲んで小文字形式を保持するか、またはその識別子を使用するときは常に言語的に正しい大文字形式を使用することができます。

  11. 同じ表やビューでは、複数の列に同じ名前を付けることはできません。ただし、異なる表やビューでは、複数の列に同じ名前を付けることができます。

  12. 引数の数およびデータ型が異なる場合、同じパッケージに含まれるプロシージャやファンクションに同じ名前を付けることができます。異なる引数を持ち、同じ名前のプロシージャやファンクションを同じパッケージ内に複数作成することを、オーバーロードといいます。

スキーマ・オブジェクトのネーミング例

次に、有効なスキーマ・オブジェクト名の例を示します。

last_name
horse
hr.hire_date
"EVEN THIS & THAT!"
a_very_long_and_valid_name

これらのすべての例は、「データベース・オブジェクトのネーミング規則」に示す規則に従っています。次の例は、30文字を超えているため、無効となります。

a_very_very_long_and_not_valid_name

列別名、表別名、ユーザー名およびパスワードは、オブジェクトまたはオブジェクトの部分ではありませんが、特に指定がないかぎり、同様にこれらのネーミング規則に従う必要があります。

スキーマ・オブジェクトのネーミングのガイドライン

オブジェクトとその部分に名前を付ける場合に有効なガイドラインを次に示します。

  • わかりやすい名前(またはよく知られている省略形)を使用します。

  • 一貫したネーミング規則を使用します。

  • 複数の表にまたがる同一のエンティティや属性を記述するためには、同一の名前を使用します。

オブジェクトに名前を付けるときは、名前を短く、使いやすくするという目標と、できるだけわかりやすい名前にするという目標のバランスをとる必要があります。迷ったときは、よりわかりやすい名前を選んでください(データベース内のオブジェクトは、長年の間に多数の人に使用される可能性があるため)。表の列に、payment_due_dateではなくpmddのような名前を付けると、10年後のデータベース管理者が見たときに理解できない可能性があります。

一貫したネーミング規則を使用すると、アプリケーション上の各表の働きが理解しやすくなります。そのような規則の例として、FINANCEアプリケーションに属している表の名前をすべてfin_で始めるような場合が考えられます。

同一のエンティティや属性に対しては、複数の表にまたがっていても同じ名前を使用してください。たとえば、employeesサンプル表とdepartmentsサンプル表の部門番号列には、どちらにもdepartment_idという名前を付けます。