Mega Code Archive

 
Categories / Oracle PLSQL / Object Oriented Database
 

Call object constructor in an insert statement

SQL> SQL> SQL> create or replace   2  type person as object (   3   first_name varchar2(100),   4   last_name varchar2(100),   5   dob date,   6   phone varchar2(100),   7   member function get_last_name return varchar2,   8   member function get_phone_number return varchar2 )   9  not final  10  / Type created. SQL> SQL> SQL> create or replace   2  type body person as   3    member function get_last_name return varchar2 is   4    begin   5      return self.last_name;   6    end;   7    member function get_phone_number return varchar2 is   8    begin   9      return self.phone;  10    end;  11  end;  12  / Type body created. SQL> SQL> create or replace   2  type new_employee under person (   3    empno number,   4    hiredate date,   5    work_phone varchar2(100),   6    overriding member function get_phone_number return varchar2,   7    member function get_home_phone_number return varchar2 )   8  not final   9  / Type created. SQL> SQL> create or replace   2  type body new_employee as   3    overriding member function get_phone_number return varchar2 is   4    begin   5      return self.work_phone;   6    end;   7    member function get_home_phone_number return varchar2 is   8    begin   9      return self.phone;  10    end;  11  end;  12  / Type body created. SQL> SQL> SQL> SQL> SQL> create table person_table( p person ); Table created. SQL> SQL> SQL> SQL> insert into person_table values   2  ( person( null, 'Kyte', null, '703.555.5555' ) )   3  / 1 row created. SQL> SQL> insert into person_table values   2  ( new_employee(  null, 'Beck', null, '703.555.1111', 1234, null, '703.555.2222' ) )   3  / 1 row created. SQL> SQL> insert into person_table values   2  ( new_employee(  null, 'Viper', null, '703.555.3333', 5678, null, '703.555.4444' ) )   3  / 1 row created. SQL> SQL> select * from person_table; P(FIRST_NAME, LAST_NAME, DOB, PHONE) -------------------------------------------------------------------------------- person(NULL, 'Kyte', NULL, '703.555.5555') NEW_EMPLOYEE(NULL, 'Beck', NULL, '703.555.1111', 1234, NULL, '703.555.2222') NEW_EMPLOYEE(NULL, 'Viper', NULL, '703.555.3333', 5678, NULL, '703.555.4444') SQL> drop table person_table; Table dropped. SQL> SQL> drop type new_employee; Type dropped. SQL> SQL> drop type person; Type dropped. SQL> SQL>