Object Oriented Database Oracle PLSQL

SQL>
SQL> create or replace
  2  type person as object(
  3   first_name varchar2(100),
  4   last_name varchar2(100) )
  5  /
Type created.
SQL>
SQL>
SQL>
SQL> alter type person
  2  add attribute dob date
  3  cascade not including table data
  4  /
Type altered.
SQL>
SQL> create or replace
  2  type employee as object(
  3   name person,
  4   empno number,
  5   hiredate date,
  6   sal number,
  7   commission number,
  8   order member function match ( p_employee employee ) return integer )
  9  /
Type created.
SQL>
SQL> create or replace
  2  type body employee as
  3   order member function match ( p_employee employee ) return integer is
  4   begin
  5    if self.empno > p_employee.empno then
  6      return 1;
  7    elsif self.empno < p_employee.empno then
  8      return -1;
  9    else
 10      return 0;
 11    end if;
 12   end;
 13  end;
 14  /
Type body created.
SQL>
SQL> declare
  2   l_emp employee;
  3  begin
  4   l_emp := employee( person( 'Tom', 'K', sysdate ), 12345, '01-JAN-01',1,1);
  5   dbms_output.put_line( 'Empno: ' || l_emp.empno );
  6   dbms_output.put_line( 'First Name: ' || l_emp.name.first_name );
  7   end;
  8  /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> drop type employee;
Type dropped.
SQL>
SQL> drop type person;
Type dropped.
SQL>
SQL>