object oriented database
This works OK (tested on Oracle 11.2):

create or replace type name_student as object
(
  fname varchar2(10),
  lname varchar2(10)
);
/

create or replace type add_student as object
(
  street varchar2(10),
  city varchar2(10)
);
/

create or replace type student_detail as object
(
  name name_student,
  address add_student,
  salary number(10),
  member function getsalary return number
);
/

create or replace type body student_detail as
  member function getsalary return number as
  begin
    return (salary*10);
  end getsalary;
end;
/

show errors;

create table student_table(S student_detail);


Test:

SQL&gt; insert into student_table values
(
  student_detail
  (
    name_student('abc','pqr'),add_student('ABCD','pqrs'),2000
  )
);  2    3    4    5    6    7

1 row created.

SQL&gt; select * from student_table;

S(NAME(FNAME, LNAME), ADDRESS(STREET, CITY), SALARY)
--------------------------------------------------------------------------------
STUDENT_DETAIL(NAME_STUDENT('abc', 'pqr'), ADD_STUDENT('ABCD', 'pqrs'), 2000)


SQL Fiddle doesn't seem to like it too much!