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