oracle中object在哪打开,oracle:对象(object)操作

创建对象类型

CREATE TYPE object_type ASOBJECT(

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 ASMEMBERFUNCTION fun_name RETURN type ISvar_name type;BEGIN

NULL;END;END;/

获取有关对象类型的信息

DESC[RIBE] object_type;

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

SET DESCRIBE DEPTH 2

DESC[RIBE] object_type;

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

CREATE TABLEtable_name(

column_name type,

column_name1 object_type

);

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

CREATE TABLE object_tab_name OF object_type;

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

对象引用和对象标示符

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

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

CREATE TABLEtable_name(

column_name type,

obj_col_name REF object_type SCOPEIS obj_tab_name);

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

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

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

INSERT INTOtable_name(

column_name, obj_col_name)VALUES('xx',object_type('xx','xx','xx) );

or

INSERT 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 *

FROMtable_name TWHERE T.obj_col_name.column_name= xx;

对对象表的DML操作

插入数据

INSERT INTO obj_tab_name VALUES(

object_type(x,xx,xxx,xxxx));INSERT INTOobject_tab_name

(column_name1,column_name2)VALUES(

x,xx);

两种方法一样的。

从对象表中选择数据

SELECT *

FROM obj_tab_name;

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

SELECTVALUE(T)FROM obj_tab_name T;

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

类型继承 NOT FINAL

CREATE TYPE obj_par_name ASOBJECT(

column_name type

)NOT FINAL;

CREATETYPE obj_chi_name UNDER obj_par_name(

column_name1 type

);

NOT INSTANTIABLE对象类型

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

CREATE TYPE object_name ASOBJECT(

column_name type

)NOT FINAL NOT INSTANTIABLE;

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

自定义构造函数

CREATE OR REPLACE TYPE object_name ASOBJECT(

column_name type,

CONSTRUCTORFUNCTIONfun_name(

column_name1NUMBER,

column_name2VARCHAR2)RETURN SELF ASRESULT,

CONSTRUCTORFUNCTIONfun_name(

column_name1NUMBER,

column_name2VARCHAR2column_name3NUMBER)RETURN SELF ASRESULT

);/

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

CREATE OR REPLACE TYPE BODY object_name ASCONSTRUCTORFUNCTIONfun_name(

p_name1NUMBER,

p_name2VARCHAR2)RETURN SELF AS RESULT IS

BEGINSELF.column_name1 :=p_name1;

SELF.column_name2 :=p_name2;

SELF.column_name3 :=default_val;RETURN;END;

CONSTRUCTORFUNCTIONfun_name(

p_name1NUMBER,

p_name2VARCHAR2,

p_name3NUMBER)RETURN SELF AS RESULT IS

BEGINSELF.column_name1 :=p_name1;

SELF.column_name2 :=p_name2;

SELF.column_name3 :=P_name3;RETURN;END;END;/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值