面向对象思想在Oracle表中的应用

我们知道现在大部分流行的编程语言都是面向对象的.面向对象里一切皆是对象.也就是说一个个的class.在Oracle数据中其实也用到这种思想.我们大部分时候创建一个表时指定每一列的类型都是系统默认的类型.

但是有时候为了更加直观,方便我们也可以自定义一些类型,然后建表时指定一列为自定义的类型.这样的表叫对象表

例如我创建一个部门信息表,包括员工姓名,年龄,部门.一般情况都是这样建表:

CREATE TABLE deptInfo(ename varchar2(20),  home ,age int, dept varchar2(20));

但我们也可以创建一个对象person.它包括姓名和年龄.然后我们建表时指定这个表某列类型为这个自定义类型.

1.先创建一个自定义对象类型,

CREATE TYPE person AS OBJECT(ename varchar2(20), age int ); --除了在对象中创建几个不同类型的成员外,还可以创建成员函数,等会再给示例

对象类型创建好后也像创建表一样会被保存在数据库中.以后我们就可以像使char,int这样的类型一样使用它.我们可以通过数据字典查找相关信息:

SELECT * FROM user_types;       --类型名字如果object,collection
SELECT * FROM user_types_attrs;     --类型的属性(成员)
SELECT * FROM user_type_methods; --类型的方法(成员函数)

2.创建一个使用到对象的表

CREATE TABLE deptInfo(staff person,dept varchar2(20));

3.插入值到对象表中:

INSERT INTO deptInfo VALUES(person('arwen',18), 'mgr');--插入staff那一列值时有点像插入一个构造函数一样.type_name(para1,para2...)

4.查询对象表:

比如要查询员工的名字:

SELECT d.staff.ename FROM deptInfo  d;--注意这里一定要给表指定一个别名d.如果像这样SELECT d.staff.ename FROM deptInfo;会出错

或者查找所有信息:SELECT * FROM deptInfo;

5.更新对象表:

UPDATE deptInfo SET dept='dev' WHERE d.staff.ename='arwen';



创建一个带方法的对象:



1.创建对象类型

CREATE OR REPLACE TYPE money AS OBJECT(

                          sal  int,

                          bonus int,

                      MEMBER FUNCTION sandb RETURN int);

这和PACKAGE类似,上面就像头一样,下面还得有对象体.

CREATE OR REPLACE TYPE BODY money AS

           MEMBER FUNCTION sandb RETURN int IS

                  BEGIN

                RETURN (sal + bonus);

                 END;

END;

2.创建对象表:

CREATE TABLE company(ename varchar2(20), pain money);

INSERT INTO company VALUES('arwen', money(200,100));

SELECT c.pain.sandb() FROM company  c;     --结果为300;



补充:怎么使用数组array(跟其他编程语言中的数组基本一样):

CREATE TYPE qq AS ARRAY(2) OF int; --qq为整数数组,大小为2

CREATE TABLE tecent (vname varchar(30), qqnumber qq);

INSERT INTO tecent VALUES('mygod',qq(1314520, 574752539));



                


猜你喜欢

转载自weiwenhp.iteye.com/blog/1673692