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>
|