Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: how to update an inherited subtype object's attributes in oracle 9i
Originally posted by Bo Wang
> hi, there:
> I have two tables, UNIT_TAB and PERSON_TAB, unit_tab will keep all
> the information of university, department and faculty, university_t,
> department_t and faculty_t are subtype of unit_t; person_tab will
> store all the info about president, professor and staff, and
> president_t, professor_t and staff_t are subtype of person_t.
> when I try to populate the database, I find I need to update the
> attributes of the objects of the subtype, but I cannot find a way to
> update them, since all the attributes seem to be hidden from the
> supertype object. I paste part of the codes I have now, hopefully
> someone can give me a clue how to update it.
> for example, if I want to update the unit_v() or person_v() of
> unit_tab, which command can do this.
> BTW, when I use select * from unit_tab, I could only see the
> attributes of supertype, is a way I can see all the attibutes of the
> subtype, so i can check if I have succefully inserted all the
> infomations.
>
>
> thanks a lot!
>
> Bo
>
> ----------------------------------------------------------------------
> --------
>
> drop table UNIT_TAB;
> drop table PERSON_TAB;
>
> drop type person_t force;
> drop type person_v force;
> drop type president_t force;
> drop type staff_t force;
> drop type professor_t force;
>
> drop type unit_t force;
> drop type unit_v force;
> drop type department_t force;
> drop type faculty_t force;
> drop type university_t force;
>
> create type person_t as object (
> name varchar2(30)
> ) not final
> /
>
> create or replace type unit_t as object (
> name varchar2(30)
> ) not final
> /
>
> create type person_v as varray(40) of ref person_t
> /
>
> create type unit_v as varray(40) of ref unit_t
> /
>
> create type university_t under unit_t (
> sub_units unit_v,
> president ref person_t,
> univ_staffs person_v
> )
> /
>
> create type faculty_t under unit_t (
> faculty_univ ref unit_t,
> faculty_depts unit_v,
> faculty_profs person_v,
> faculty_staffs person_v
> )
> /
>
> create type department_t under unit_t (
> dept_unit ref unit_t,
> dept_profs person_v,
> dept_staffs person_v
> )
> /
>
> create type president_t under person_t(
> title varchar2(30),
> university ref unit_t
> )
> /
>
> create type staff_t under person_t(
> staff_rank varchar2(30),
> staff_unit ref unit_t
> )
> /
>
> create type professor_t under person_t(
> research varchar2(30),
> prof_unit ref unit_t
> )
> /
>
>
> create table UNIT_TAB of unit_t;
> --nested table unit_nt store as unit_nt_tab
> --nested table person_nt store as person_nt_tab;
>
> create table PERSON_TAB of person_t;
> --nested table unit_nt store as unit_nt_tab
> --nested table person_nt store as person_nt_tab;
>
>
> insert into unit_tab values( university_t('Queens University',
> unit_v(), null, person_v() ) );
> --insert into unit_tab values( unit_t('Queens University') );
>
> insert into person_tab values( president_t('Edward', 'President',
> ( select ref(u) from unit_tab u where u.name='Queens
> University' )
> ) );
>
> --update unit_tab
> --set values = ( university_t('Queens University', unit_v(), (select
> ref(p) from person_tab where p.name='Edward' ), person() ))
> --where name = 'Queens University';
>
>
> select * from unit_tab;
>
> select * from person_tab;
Presumably this is a college assignment, because no real database should
be designed this way. This is an exercise in using Oracle OO features
"because they are there", and thereby turning a fairly simple database
of about 6-8 tables into a lot of OO spaghetti. Consider these points:
Like I said, spaghetti. A simple relational model would be simpler, cleaner, more robust, etc.
Sorry, I don't know the answer to your question as I don't use these features. Hopefully you won't either, once you have passed your course and begin designing real databases.
-- Posted via http://dbforums.comReceived on Mon Jun 02 2003 - 05:24:41 CDT
![]() |
![]() |