オブジェクト変数を作成して初期化した後、次の形式のドット表記法を使用することで、個々の属性を参照できます。

object.attribute

ここでの object はオブジェクト変数に割り当てられた識別子で、attribute はオブジェクト型の属性の識別子です。

オブジェクト型の属性の場合は、次の形式で参照する必要があります。

object.attribute.attribute_inner

attribute_inner は、オブジェクト定義で属性が参照するオブジェクト型に属する識別子です。

次の例では、前述の無名ブロックを拡張して、emp_obj_type オブジェクトに割り当てられた値を表示します。

DECLARE
    v_emp          EMP_OBJ_TYPE;
BEGIN
    v_emp := emp_obj_type(9001,'JONES',
        addr_obj_type('123 MAIN STREET','EDISON','NJ',08817));
    DBMS_OUTPUT.PUT_LINE('Employee No   : ' || v_emp.empno);
    DBMS_OUTPUT.PUT_LINE('Name          : ' || v_emp.ename);
    DBMS_OUTPUT.PUT_LINE('Street        : ' || v_emp.addr.street);
    DBMS_OUTPUT.PUT_LINE('City/State/Zip: ' || v_emp.addr.city || ', ' ||
        v_emp.addr.state || ' ' || LPAD(v_emp.addr.zip,5,'0'));
END;

以下の情報は、無名ブロックからの出力です。

Employee No   : 9001
Name          : JONES
Street        : 123 MAIN STREET
City/State/Zip: EDISON, NJ 08817

メソッドは属性と同じように呼び出されます。

オブジェクト変数を作成して初期化した後、次の形式のドット表記法を使用することで、メンバープロシージャまたは関数を呼び出すことができます。

object.prog_name

ここでの object はオブジェクト変数に割り当てられた識別子で、prog_name はプロシージャまたは関数の識別子です。

オブジェクト変数を使用して静的プロシージャまたは関数を呼び出すことはできません。 代わりに、オブジェクト型名を使用して呼び出すことができます。

object_type.prog_name

ここでの object_type はオブジェクト型に割り当てられた識別子で、prog_name はプロシージャまたは関数の識別子です。

メンバープロシージャ display_emp を呼び出すことで、前述の無名ブロックの結果を複製できます。

DECLARE
    v_emp          EMP_OBJ_TYPE;
BEGIN
    v_emp := emp_obj_type(9001,'JONES',
        addr_obj_type('123 MAIN STREET','EDISON','NJ',08817));
    v_emp.display_emp;
END;

以下の情報は、無名ブロックからの出力です。

Employee No   : 9001
Name          : JONES
Street        : 123 MAIN STREET
City/State/Zip: EDISON, NJ 08817

以下の無名ブロックは、dept_obj_type のインスタンスを作成し、メンバープロシージャ display_dept を呼び出します。

DECLARE
    v_dept          DEPT_OBJ_TYPE := dept_obj_type (20);
BEGIN
    v_dept.display_dept;
END;

以下の情報は、無名ブロックからの出力です。

Dept No    : 20
Dept Name  : RESEARCH

次のようにオブジェクト型名で修飾することにより、dept_obj_type で定義された静的関数を直接呼び出すことができます。

BEGIN
    DBMS_OUTPUT.PUT_LINE(dept_obj_type.get_dname(20));
END;

RESEARCH