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