修飾名およびドット表記法

ある名前付き項目が別の名前付き項目に属する場合は、ドット表記法を使用して「子」項目の名前を「親」項目の名前で修飾できます(場合よっては必須)。たとえば:

参照する項目 修飾に使用する必要がある項目 使用する構文

レコードのフィールド

レコードの名前

record_name.field_name

コレクションのメソッド

コレクションの名前

collection_name.method

疑似列CURRVAL

順序の名前

sequence_name.CURRVAL

疑似列NEXTVAL

順序の名前

sequence_name.NEXTVAL

識別子が名前付きPL/SQLユニットで宣言されている場合、次の構文を使用して単純名(宣言に含まれる名前)をユニット(ブロック、サブプログラムまたはパッケージ)の名前で修飾できます。

unit_name.simple_identifier_name

識別子を参照できない場合は、識別子の名前を修飾する必要があります(「識別子の有効範囲と可視性」を参照)。

識別子が別のスキーマに属する場合は、次の構文を使用して識別子の名前をスキーマの名前で修飾する必要があります。

schema_name.package_name

例B-1に示すとおり、単純名は複数の名前で修飾できます。

あいまいになる可能性のある修飾名の例をいくつか次に示します。

  • ファンクションの戻り値のフィールドまたは属性。たとえば:

    func_name().field_name
    func_name().attribute_name
    
  • 別のスキーマが所有するスキーマ・オブジェクト。たとえば:

    schema_name.table_name
    schema_name.procedure_name()
    schema_name.type_name.member_name()
    
  • 別のユーザーが所有するパッケージ・オブジェクト。たとえば:

    schema_name.package_name.procedure_name()
    schema_name.package_name.record_name.field_name
    
  • ADTを含むレコード。たとえば:

    record_name.field_name.attribute_name
    record_name.field_name.member_name()

例B-1 修飾名

CREATE OR REPLACE PACKAGE pkg1 AUTHID DEFINER AS
  m NUMBER;
  TYPE t1 IS RECORD (a NUMBER);
  v1 t1;
  TYPE t2 IS TABLE OF t1 INDEX BY PLS_INTEGER;
  v2 t2; 
  FUNCTION f1 (p1 NUMBER) RETURN t1;
  FUNCTION f2 (q1 NUMBER) RETURN t2;
END pkg1;
/

CREATE OR REPLACE PACKAGE BODY pkg1 AS
  FUNCTION f1 (p1 NUMBER) RETURN t1 IS
    n NUMBER;
  BEGIN
     n := m;             -- Unqualified variable name
     n := pkg1.m;        -- Variable name qualified by package name
     n := pkg1.f1.p1;    -- Parameter name qualified by function name,
                         --  which is qualified by package name
     n := v1.a;          -- Variable name followed by component name
     n := pkg1.v1.a;     -- Variable name qualified by package name
                         --  and followed by component name
     n := v2(10).a;      -- Indexed name followed by component name
     n := f1(10).a;      -- Function invocation followed by component name
     n := f2(10)(10).a;  -- Function invocation followed by indexed name
                         --  and followed by component name
     n := hr.pkg1.f2(10)(10).a;  -- Schema name, package name,
                                 -- function invocation, index, component name
     v1.a := p1;
     RETURN v1;
   END f1;

   FUNCTION f2 (q1 NUMBER) RETURN t2 IS
     v_t1 t1;
     v_t2 t2;
   BEGIN
     v_t1.a := q1;
     v_t2(1) := v_t1;
     RETURN v_t2;
   END f2;
END pkg1;
/