Mega Code Archive

 
Categories / Oracle PLSQL / Object Oriented Database
 

Access member variable in member function in a type

SQL> SQL> SQL> create or replace   2  type employee as object(   3    name varchar2(100),   4    empno number,   5    hiredate date,   6    vacation_used number,   7    final member procedure vacation( p_days number ),   8    not instantiable member procedure give_raise( p_increase number ),   9    not instantiable member function yearly_compensation return number  10  )  11  not instantiable  12  not final  13  / Type created. SQL> SQL> create or replace   2  type body employee as   3    final member procedure vacation( p_days number ) is   4    begin   5      if p_days + self.vacation_used <= 10 then   6        self.vacation_used := self.vacation_used + p_days;   7      else   8        raise_application_error(   9          -20001,  10          'You are ' || to_char(p_days + self.vacation_used - 10) ||  11          ' days over your vacation limit.' );  12      end if;  13    end;  14  end;  15  / Type body created. SQL> SQL> SQL> create or replace   2  type sales_rep   3  under employee(   4    salary number,   5    commission number,   6    overriding member procedure give_raise( p_increase number ),   7    member procedure give_commission( p_increase number ),   8    overriding member function yearly_compensation return number   9  )  10  / Type created. SQL> create or replace   2  type body sales_rep as   3   overriding member procedure give_raise( p_increase number ) is   4   begin   5     self.salary := self.salary + (self.salary * (p_increase/100));   6   end;   7   member procedure give_commission( p_increase number ) is   8   begin   9     self.commission := self.commission + p_increase;  10   end;  11   overriding member function yearly_compensation return number is  12   begin  13     return self.salary + self.commission;  14   end;  15  end;  16  / Type body created. SQL> SQL> drop type sales_rep; Type dropped. SQL> drop type employee; Type dropped. SQL> SQL>