Oracle使用对象类型3(MEMBER方法的对象类型)

MERMER方法用于访问对象实例的数据,如果在对象类型中需要访问特定对象实例的数据,则必须要定义MEMBER方法。

MEMBER方法只能由对象实例调用,不能由对象类型调用。

下面以建立和使用对象类型person_typ2为例:

包含name,gender,birthdate和address等四个属性,以及一个MEMBER过程change_address和一个MEMBER函数get_info。

CREATE OR REPLACE TYPE person_typ2 AS OBJECT(

name VARCHAR2(10),gender VARCHAR2(2),birthdate DATE,address VARCHAR2(100),

MEMBER PROCEDURE change_address(new_addr VARCHAR2),

MEMBER FUNCTION get_info RETURN VARCHAR2

);

/

然后要建立对象类型体person_typ2

CREATE OR REPLACE TYPE BODY person_typ2 IS

MEMBER PROCEDURE change_address(new_addr VARCHAR2)

IS

BEGIN

address:=new_addr;

END;

MEMBER FUNCTION get_info RETURN VARCHAR2

IS

v_info VARCHAR2(100);

BEGIN

v_info:='姓名'||name||'出生日期'||birthdate;

RETURN v_info;

END;

END;

/

在完成了对象类型person_typ2的创建工作之后,就可以使用该对象类型了。基于person_typ2建立对象表employee_tab2,并插入数据:

CREATE TABLE employee_tab2(

eno NUMBER(6),person person_typ2,sal NUMBER(6,2),job VARCHAR2(10)

);

INSERT INTO employee_tab2(eno,sal,job,person)

VALUES(1,2000,'高级焊工',person_typ2('王明','男','11-1月-75','呼和浩特');

INSERT INTO employee_tab2(eno,sal,job,person)

VALUES(2,1500,'质量检查员',person_typ2('玛丽','女','11-5月-75','呼和浩特'));

在执行了以上语句之后,就会建立对象表employee_tab2,并插入两条数据。因为在定义对象类型person_tab2时定义了对象方法,所以可以在PL/SQL块中使用其对象方法。

下面以调用对象方法change_address改变人员地址:

DECLARE

v_person person_typ2;

BEGIN

SELECT person INTO v_person FROM employee_tab2

WHERE eno=&&no;

v_person.change_address('呼和浩特呵呵呵呵号');

UPDATE employee_tab2 SET person=v_person WHERE eno=&no;

dbms_output.put_line(v_person.get_info);

END;

/

输入no的值:1

.....

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop数据仓库

Oracle sqlldr 如何导入一个日期列

1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCO...

1786
来自专栏linux驱动个人学习

高通Audio中ASOC的machine驱动

ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的...

9664
来自专栏一个会写诗的程序员的博客

java.base.jmod

/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods$ jmod list java....

1112
来自专栏Golang语言社区

Knapsack problem algorithms for my real-life carry-on knapsack

I'm a nomad and live out of one carry-on bag. This means that the total weight o...

1142
来自专栏Ryan Miao

ehcache报错

jfinal2.0+tomcat7+ehcache2.6.11+Linux Linux version 2.6.18-164.el5 (mockbuild@x8...

3729
来自专栏余生开发

echarts太阳分布图-饼图来回穿梭

var dom = document.getElementById("container");

1152
来自专栏码匠的流水账

聊聊HystrixThreadPool

hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java

761
来自专栏我和未来有约会

简练的视图模型 ViewModel

patterns & practices Developer Center 发布了 Unity Application Block 1.2 for Silver...

2169
来自专栏linux驱动个人学习

高通msm8909耳机调试

1、DTS相应修改: DTS相关代码:kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skuc.dtsi: 1 s...

7425
来自专栏Hongten

spring开发_JDBC操作MySQL数据库_使用xml配置事务管理

http://www.cnblogs.com/hongten/archive/2012/03/09/java_spring_jdbc.html

621

扫码关注云+社区