博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle:对象(object)操作
阅读量:7057 次
发布时间:2019-06-28

本文共 2810 字,大约阅读时间需要 9 分钟。

创建对象类型

CREATE TYPE object_type AS OBJECT(column_name type,[column_name type,][MEMBER FUNCTION fun_name RETURN type][MEMBER PROCEDURE proc_name ]);

 

 其中MEMBER FUNCTION 声明了对象内部函数,MEMBER PROCEDURE 声明了内部过程,添加对象体(body)

CREATE TYPE BODY object_type AS  MEMBER FUNCTION fun_name RETURN type IS    var_name type;  BEGIN    NULL;  END;END;/

 

获取有关对象类型的信息

DESC[RIBE] object_type;

 

如果对象是嵌套对象,可以通过设定深度来输出子对象,下面是输出两级的。

SET DESCRIBE DEPTH 2DESC[RIBE] object_type;

 

 使用对象类型定义列和对象表

CREATE TABLE table_name(column_name type,column_name1 object_type);

 

 上面的 object_type 是通过之前的对象类型定义而来的。

CREATE TABLE object_tab_name OF object_type;

 上面定义的表跟普通的创建表没有太大的分别(可能)。

 

对象引用和对象标示符

对象表的另一一个不同之处在于可以使用对象引用(object reference)为对象表之间的关系建立模型,而不使用外键达到外键的效果。

 使用REF类型进行定义,通常用作指向对象表中对象的指针。

CREATE TABLE table_name(column_name type,obj_col_name REF object_type SCOPE IS obj_tab_name);

 如果 obj_tab_name 表已经存在,则可以不写 SCOPE IS obj_tab_name

注意:obj_tab_name 是用 object_type 创建的对象表

 

向包含对象属性的表插入数据

INSERT INTO table_name(column_name, obj_col_name)VALUES('xx',object_type('xx','xx','xx) );orINSERT INTO table_name(column_name,obj_col_name)VALUES(x,(SELECT REF(T) FROM obj_tab_name T WHERE T.col=x) );

 

下面那个是通过直接插入标识符,数据已经存在了对象表obj_tab_name 中,REF() 是获得对象的标识符,

 

查找数据的时候,object_tpye 中的全部数据会合成一个数据输出,就是列名下面是很长的一个下划线,没有断开

要用对象中的某个属性作为查找条件

SELECT *FROM table_name TWHERE T.obj_col_name.column_name= xx;

 

对对象表的DML操作

插入数据

INSERT INTO obj_tab_name VALUES(object_type(x,xx,xxx,xxxx));INSERT INTO object_tab_name (column_name1,column_name2)VALUES(x,xx);

两种方法一样的。

从对象表中选择数据

SELECT *FROM obj_tab_name;

 

这样得出的结果跟普通表一样,每个列分开。

SELECT VALUE(T)FROM obj_tab_name T;

 

这样得出的结果跟查找包含对象类型的表,的查找结果一样,全部数据合并成一样。

 

类型继承 NOT FINAL

CREATE TYPE obj_par_name AS OBJECT(column_name type)NOT FINAL;

 

CREATE TYPE obj_chi_name UNDER obj_par_name(column_name1 type);

 

NOT INSTANTIABLE对象类型

可以防止创建该类型的对象实例。

CREATE TYPE object_name AS OBJECT(column_name type)NOT FINAL NOT INSTANTIABLE;

 

 NOT INSTANTIABLE 对象不能为 FINAL, 所以和NOT FINAL 一起用。

 自定义构造函数

CREATE OR REPLACE TYPE object_name AS OBJECT(column_name type,CONSTRUCTOR FUNCTION fun_name(column_name1 NUMBER,column_name2 VARCHAR2)RETURN SELF AS RESULT,CONSTRUCTOR FUNCTION fun_name(column_name1 NUMBER,column_name2 VARCHAR2column_name3 NUMBER)RETURN SELF AS RESULT);/

 

上面的对象包含两个构造函数,注意是同名的,在调用类型是会自动按属性来匹配

CREATE OR REPLACE TYPE BODY object_name AS  CONSTRUCTOR FUNCTION fun_name(    p_name1 NUMBER,    p_name2 VARCHAR2  )RETURN SELF AS RESULT IS  BEGIN    SELF.column_name1 :=p_name1;    SELF.column_name2 :=p_name2;    SELF.column_name3 :=default_val;  RETURN ;  END;  CONSTRUCTOR FUNCTION fun_name(    p_name1 NUMBER,    p_name2 VARCHAR2,    p_name3 NUMBER  )RETURN SELF AS RESULT IS  BEGIN    SELF.column_name1 :=p_name1;    SELF.column_name2 :=p_name2;    SELF.column_name3 :=P_name3;  RETURN ;  END;END;/

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Azhu/archive/2012/04/16/2451072.html

你可能感兴趣的文章
git命令总结
查看>>
tomcat高访问jvm配置
查看>>
谢烟客---------二进制安装MariaDB,管理关系型数据库的基本组件
查看>>
JS 判断手机浏览器
查看>>
Xcode WorkSpace静态库多项目依赖
查看>>
【C语言】 实现memset
查看>>
JS 流程设计器
查看>>
blog小记
查看>>
我的友情链接
查看>>
fileoper.py
查看>>
我的友情链接
查看>>
shell脚本将指定目录下前3天日期目录使用tar打包后并将其删除源日期目录
查看>>
类的静态成员
查看>>
osi七层模型的分类
查看>>
潍坊SEO教程之网站关键词密度
查看>>
HTTPS原理和CA证书申请(满满的干货)
查看>>
跨交换机实现VLAN
查看>>
mysql客户端的使用
查看>>
AIX创建删除page space
查看>>
scala 中的 日期格式化
查看>>