修飾名およびドット表記法
ある名前付き項目が別の名前付き項目に属する場合は、ドット表記法を使用して「子」項目の名前を「親」項目の名前で修飾できます(場合よっては必須)。たとえば:
参照する項目 | 修飾に使用する必要がある項目 | 使用する構文 |
---|---|---|
レコードのフィールド |
レコードの名前 |
|
コレクションのメソッド |
コレクションの名前 |
|
疑似列 |
順序の名前 |
|
疑似列 |
順序の名前 |
|
識別子が名前付き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; /