Referencing an Object v11

Once an object variable is created and initialized, individual attributes can be referenced using dot notation of the form:

<object>.<attribute>

object is the identifier assigned to the object variable. attribute is the identifier of an object type attribute.

If attribute, itself, is of an object type, then the reference must take the form:

<object>.<attribute>.<attribute_inner>

attribute_inner is an identifier belonging to the object type to which attribute references in its definition of object.

The following example expands upon the previous anonymous block to display the values assigned to the emp_obj_typ object.

DECLARE
    v_emp          EMP_OBJ_TYP;
BEGIN
    v_emp := emp_obj_typ(9001,'JONES',
        addr_obj_typ('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;

The following is the output from this anonymous block.

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

Methods are called in a similar manner as attributes.

Once an object variable is created and initialized, member procedures or functions are called using dot notation of the form:

<object>.<prog_name>

object is the identifier assigned to the object variable. prog_name is the identifier of the procedure or function.

Static procedures or functions are not called utilizing an object variable. Instead the procedure or function is called utilizing the object type name:

<object_type>.<prog_name>

object_type is the identifier assigned to the object type. prog_name is the identifier of the procedure or function.

The results of the previous anonymous block can be duplicated by calling the member procedure display_emp:

DECLARE
    v_emp          EMP_OBJ_TYP;
BEGIN
    v_emp := emp_obj_typ(9001,'JONES',
        addr_obj_typ('123 MAIN STREET','EDISON','NJ',08817));
    v_emp.display_emp;
END;

The following is the output from this anonymous block.

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

The following anonymous block creates an instance of dept_obj_typ and calls the member procedure display_dept:

DECLARE
    v_dept          DEPT_OBJ_TYP := dept_obj_typ (20);
BEGIN
    v_dept.display_dept;
END;

The following is the output from this anonymous block.

Dept No    : 20
Dept Name  : RESEARCH

The static function defined in dept_obj_typ can be called directly by qualifying it by the object type name as follows:

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

RESEARCH