日期:2014-05-16  浏览次数:20375 次

Oracle学习笔记----对象关系型数据库基础-02
继续上文

当我们利用自定义的抽象类型创建出一个表之后应该怎么插入数据,如何查看其内容?
首先,我们要利用racle提供的构造器方法(Constructor Method)来向数据库中插入抽象类型的数据,比如:

     insert into CUSTOMER values
     (1, PERSON_TY('ComiCoder', ADDRESS_TY('WYXL ST','HZ','ZJ',310000)));


     然后,我们就可以看到CUSTOMER表中出现了一个新列;
     但是我们能否通过如下的语句来查看该CUSTOMER的Name呢?
      Select Name
     from CUSTOMER;


     答案是不行!你会得到一个ORA-00904的错误提示;

     这是因为Name不是CUSTOMER中的列,它是PERSON_TY抽象数据类型的一个属性,可以这样
      Select c.Person.Name
     from CUSTOMER c
 
     (注意,访问数据类型需要利用表的别名,因为Person是CUSTOMER的一个属性,所以需要给CUSTOME取一个小名c)

     同理,若想得到Person所住的街道可以这样
      Select c.Person.Address.street
     from CUSTOMER c


     是不是很像OOP的编程写法,木有错,面向对象面起来都差不多。

     我们再看看其他的SQL写法,比如,我们能否查出以H开头的城市中居住的人呢?
      Select c.Person.Name, c.Person.Address.City
      from CUSTOMER c
      where c.Person.Address.City like 'H%'


      如果该人搬家了,我们能否更新其街道地址呢?当然,下面这个语句可以将原来住在WYXL ST的人的地址修改为ZJH ST:
      update CUSTOMER c
      set c.Person.Address.Street = 'ZJH ST'
      where c.Person.Address.Street = 'WYXL ST'


      可以看出,对象关系数据库中的查询,更新等会变得稍微复杂一些,因为属性之间的关系变的更加复杂了,所以,用户需要这种复杂性和对象数据库能够带来的好处之间作出权衡。