oracle面向对象的数据类型,Oracle面向对象编程OOP

1.2.6  嵌套表AS TABLE OF

嵌套表是表中之表,一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。

语法如下:

CREATE OR REPLACE TYPE table_name AS TABLE OF type;

语法说明:

1.  table_name :嵌套表名。

2. type:数组的类型,可以是基本变量,如varchar2,integer等,也可以是自定义的对象类型,如上面定义的NAME_TYPE。

1.2.7  继承-Oracle中面向对象特征

继承父类的子类对象类型将有父类的所有属性、方法和过程。 父类型必须声明为NOT FINAL,子类型使用关键字UNDER。

举例:

--创建父类型

CREATE TYPE animal_type AS OBJECT(

name    VARCHAR2(50),

hair    VARCHAR2(50),

foot    VARCHAR2(50)

) NOT FINAL;

--子类型继承父类型

CREATE TYPE cat_type UNDER animal_type(

paw    VARCHAR2(50)

);

如果父类没有声明为NOT FINAL,子类在继承的时候将报错:Error: PLS-00590: attempting to create a subtype UNDER a FINAL type。

1.2.8 重写overriding

重写就是在子类中对父类又有的方法或过程重新实现。重写关键字为overriding,在子类中把要重写的方法或过程声明和实现之前加上该关键字。

举例:

定义头部:

CREATE OR REPLACE TYPE cat_type UNDER annimal_type

(

paw VARCHAR2(50),

OVERRIDING MEMBER PROCEDURE PROC_RUN

)

定义主体:

CREATE OR REPLACE TYPE BODY cat_type

IS

OVERRIDING MEMBER PROCEDURE PROC_RUN

IS

BEGIN

//重新实现

END;

END;

1.2.9  对象表

对象表是指该表的一行都是一个对象(对象类型的实例),每个对象有一个OID(object ID)。

1.2.9.1 对象表的创建

创建对象表的语法:

CREATE TABLE table_name OF object_type;

语法说明:

1.table_name:对象表名称,执行创建对象表语句后,数据库中将会生成一个名字为table_name的表。

2.object_type:对象类型,生成的表的字段和对象类型时对应的。

举例:

CREATE TABLE t_name OF NAME_TYPE;

执行上面语句后,数据库将生成一个t_name表,这个表就是对象表。

1.2.9.2  对象表的关联

对象表之间没有主外键关联的概念,为了体现这层关系,oracle中用了ref对象来实现。

下面介绍下相关操作法和函数:

1.  ref操作符:声明引用类型。如 name ref NAME_TYPE, 变量或字段name就是引用类型,存储NAME_TYPE型对象的OID。

2.  ref(表的别名)函数:获得对象表中对象OID值,如select ref(a) from otable a。

3.  deref(OID)函数:通过OID找到并返回行对象表中对象。

下面通过一个例子说明对象表直接的关联:

--员工对象类型

CREATE OR REPLACE TYPE employee AS OBJECT(

cardId  VARCHAR2(100),

address  VARCHAR2(100),

sex      VARCHAR2(1),

name    REF NAME_TYPE,  --通过REF操作符,表示该字段引用NAME_TYPE对象,该字段实际存储的时对象的OID

age      INTEGER

);

--创建t_employee对象表

CREATE TABLE t_employee OF employee;

--向NAME_TYPE的对象表t_name插入数据

INSERT INTO t_name VALUES('LI', 'KUI');

INSERT INTO t_name VALUES('ZHANG', 'LAN');

INSERT INTO t_name VALUES('CHEN', 'MING');

COMMIT;

--向员工表插入数据

INSERT INTO t_employee VALUES(

'101',

'beijing',

'1',

(SELECT REF(n) FROM t_name n where n.firstname = 'LI'), --通过ref(表别名)获得对象的引用

23

);

INSERT INTO t_employee VALUES(

'102',

'shanghai',

'0',

(SELECT REF(n) FROM t_name n where n.firstname = 'ZHANG'),--通过ref(表别名)获得对象的引用

23

);

COMMIT;

--通过声明一个引用变量,新增数据

DECLARE

-- 声明NAME_TYPE类型的引用

name_ref REF NAME_TYPE;

BEGIN

SELECT REF(n) INTO name_ref FROM t_name n where n.firstname = 'CHEN';

INSERT INTO t_employee VALUES(

'103',

'chengdu',

'1',

name_ref,

24

);

COMMIT;

END;

--查询员工的信息,使用deref来获得对象字段的值

SELECT t.cardId, t.address, deref(t.name) from t_employee t;

--更新引用类型,即赋予新的对象的OID值

UPDATE t_employee t SET name = (SELECT ref(n) FROM t_name n WHERE n.firstname = 'ZHANG') WHERE t.cardId = '103';

DELETE FROM t_employee WHERE name = (SELECT ref(n) FROM t_name n WHERE n.firstname = 'ZHANG');

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 序列验证脚本,oracle 生成序列脚本

今天在移植一个项目的的数据库时,要移动所有的序列,下面就是一个如何生成序列脚本的语句方法一:SELECT CREATE SEQUENCE ||SEQUENCE_NAME|| INCREMENT BY ||INCREMENT_BY || START WITH ||LAST_NUMBER|| MAXVALUE ||MAX_VALUE || CACHE ||CACHE_SIZE|| ORDER NOCYCLE ;FROM u…

php打开EXCEL过慢,打开excel很慢,编辑某个工作表很卡

一些啰嗦的话:同事一个office ,excel档有五个工作表,打开时非常慢的。进去后其中只要点击到两个工作表其中一个就很卡甚至没响应。试用wps打开流畅。但她坚持要用office说用惯了,没办法女人。这个文档接近3M,都是一些数据也没见有…

linux vim命令跳到67行,Linux学习之Vim/Vi使用(十三)

Linux学习之Vim/Vi使用Vim/Vi简介Vim/Vi工作模式Vim/Vi基本使用Vim/Vi应用技巧Vim/Vi简介Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。Linux下的编辑器最常用的就是vim或者vi文本编辑…

linux查看端口属性,linux如何查看系统属性指令?

linux是一款非常免费资源的操作系统,但是很多用户不知道怎么查看系统信息,今天小编就给大家带来了linux查看系统属性指令分享。喜欢的快点下载吧。linux查看系统属性指令分享1、查看cpu信息查看所有cpu信息:cat /proc/cpuinfo查看cpu类型&…

linux命令提示符不同,Linux命令提示符如何按照自己的习惯修改?

原本的 [rootlocalhost ]$ 看久了难免让人厌倦。如果按自己的习惯修改,既能看着舒服,又能提高“逼格”。下面小编就为大家详细介绍Linux命令提示符如何按照自己的习惯修改方法,希望能对大家有所帮助!美化Bash1、在目录下:vim .bas…

linux下如何为redis配置path,linux环境下如何启动redis

启动redisredis可执行文件说明:redis-server:redis服务器redis-cli:redis命令行客户端redis-benchmark:redis性能测试工具redis-check-aof:aof文件修复工具redis-check-dump:rdb文件检查工具1、直接启动直接…

linux从别的主机下载,从局域网内的其他Linux主机下载文件

Step 0本机与目标机都需要安装有openssh-server在本机与目标机上以root用户身份执行service ssh status # Debian上是ssh,openSUSE上是sshd,可以在键入ssh后紧接着按一下Tab键以自动补全该服务名# 或service --status-all | grep ssh # 通用可查看ssh服务…

c语言修改字符串c2133,通过create_string_buffer、create_unicode_buffer让C语言具备修改字符串的能力...

字符串的修改我们知道C中不存在字符串这个概念,python中的字符串在C中也是通过字符数组来实现的。我们说在C中创建一个字符数组有两种方式:char *s1 "hello world";char s2[] "hello world";这两种方式虽然打印的结果是一样的&…

android自定义进度条百分比跟着走,Android自定义View实现水平带数字百分比进度条...

这个进度条可以反映真实进度,并且完成百分比的文字时随着进度增加而移动的,所在位置也恰好是真实完成的百分比位置,效果如下:思路如下:第一部分是左侧的蓝色直线,代表已经完成的进度;第二部分是…

android动画view上移,在Android开发中使用View制作一个引导动画

在Android开发中使用View制作一个引导动画发布时间:2020-11-20 16:46:16来源:亿速云阅读:98作者:Leah这篇文章将为大家详细讲解有关在Android开发中使用View制作一个引导动画,文章内容质量较高,因此小编分享…

vivo android p 机型,vivo X21成全球首批Android P适配机型!vivo :不小心就秀实力了

原标题:vivo X21成全球首批Android P适配机型!vivo :不小心就秀实力了近日,2018谷歌I/O大会正式召开,会上发布了大家期待已久的Android P开发者预览版,给我们展示了众多全新特性,其中AI功能的进化让人十分眼…

直接修改html文本页面没变化,VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析...

本文实例讲述了VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法。分享给大家供大家参考,具体如下:业务场景我们在使用vue 编写 代码时,我们有一个 多行文本框控件,希望在页面点击一个按钮 在 文本框焦点位置插入一个…

live2d内嵌html,博客(网页)添加 Live2D 看板娘

Live2D demoLive2D 看板娘插件 (https://www.fghrsh.net/post/123.html) 的前端 HTML 源码基于 API 加载模型,支持 定制 提示语增加 参数设置 一键定制看板娘,易用性增加 看板娘样式设置,可直接设置宽高度等支持多种一言接口,基于…

计算机启动进入不了桌面图标,电脑开机后不显示桌面图标如何通过修改注册表解决问题...

‍近来有用户发现电脑开机后不显示桌面图标,一般遇到这样的问题,我们会进入任务管理器结束explorer.exe资源管理器进程,再重新启动来解决这个问题。但是,如果这样还无法解决不显示电脑系统桌面图标的问题,那么可以按下…

药学专业报计算机一级有用吗,全网友泣泪劝阻!高考结束之后,什么专业千万不能报?...

原标题:全网友泣泪劝阻!高考结束之后,什么专业千万不能报?本文来源:魔都囡啊呀呀呀,高考终于结束啦,大家可以轻松下啦?不过高考的硝烟还没消散,接下来的一个问题就是非常…

如何去掉html body里的 nbsp,html的空格和nbsp怎么去除?

同楼主,这个问题我也碰到了。用html_parser好像不也行replace也不解决不完全,我希望把所有数据(房间类型,面积,位置,详细位置,发布时间,价格)放一行最后没办法只能这样了import requests ##导入…

计算机数据库管理基本知识,2015年计算机四级考试《数据库技术》基础知识:概念篇...

2015年计算机四级考试《数据库技术》基础知识:概念篇信息与数据1、 信息、物质、能量是组成客观世界并促进社会发展的三大基本要素;2、 信息(Information)--是客观世界事物的存在方式和运动状态的反映,是对事物之间相互联系、相互作用的描述。信息具有可…

coffeescript html5,HTML5——前端预处理技术(Less、Sass、CoffeeScript)

一、Less1.1、概要Less是一种动态样式语言,Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。Less 将 CSS 赋予了动态语言的特性,如 变量, 继承&#…

计算机桌面程序名,深度技术win7旗舰版电脑桌面图标只显示名称了怎么办

就算是咱们没有刻意的在桌面创建程序的快捷打开方式,咱们windows系统预装的时候,也会在桌面自行的安装一些快捷方式,例如咱们比较熟悉的回收站、计算机、网络、IE图标等等,而这些图标的显示方式也是系统默认的,由图标和…

《计算机基础知识》读后感300字,计算机应用基础读后感

010在线为您甄选多篇描写计算机应用基础读后感,计算机应用基础读后感精选,计算机应用基础读后感大全,有议论,叙事 ,想象等形式。文章字数有400字、600字、800字....缓存时间: 2021-06-21计算机应用基础说课稿随着计算机应用的普及…