面向对象思想在Oracle表中的应用
2011-11-10 17:52
274 查看
我们知道现在大部分流行的编程语言都是面向对象的.面向对象里一切皆是对象.也就是说一个个的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';
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));
但是有时候为了更加直观,方便我们也可以自定义一些类型,然后建表时指定一列为自定义的类型.这样的表叫对象表
例如我创建一个部门信息表,包括员工姓名,年龄,部门.一般情况都是这样建表:
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));
相关文章推荐
- 面向对象思想在数据库开发方面的应用
- 面向对象程序设计思想 在单片机中的应用
- 学生成绩管理系统2(java类的运用,面向对象思想的应用)
- 学生成绩管理系统2(java类的运用,面向对象思想的应用)
- 关于主窗体与子窗体之间的通信以及面向对象思想的一些应用
- 关于面向对象思想在程序开发中的应用
- 黑马程序员_学习笔记2交通灯系统中面向对象思想的理解以及工厂模式的应用
- 由面向对象思想编写程序想到的
- 面向对象开发中的几个核心的思想和概念
- Android面试题——Java面向对象思想
- [转]剖析ASP.NET AJAX的面向对象思想和ASP.NET AJAX的组件开发
- 从简单计算器所想到的面向对象思想(C#源代码)
- Oracle442个应用场景----------数据库逻辑对象管理
- 面向对象思想
- Java 编程思想(一)面向对象和JVM基础
- 在VB编程中使用面向对象思想
- 鸡啄米:C++编程入门系列之十二(类与对象:面向对象设计的基本思想和特点)
- 【学习笔记】【OC语言】面向对象思想
- 面向对象思想的理解
- 小菜和大鸟的编程故事之一:活字印刷-面向对象思想的先驱