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 sql回表次數 提高SQL查詢性能 | 學步園

要寫出高效的SQL,那麼必須必須得清楚SQL執行路徑,介紹如何提高SQL性能的文章很多,這裡不再贅述,本人來談談如何從 減少SQL回表次數 來提高查詢性能,因為回表將導致掃描更多的數據塊。我們大家都知道,數據庫…

oracle执行计划的概念,SQL语句性能调整之ORACLE的执行计划

对于CBO优化器:CBO根据统计信息选择驱动表,假如没有统计信息,则在from 子句中从左到右的顺序选择驱动表。这与RBO选择的顺序正好相反。这是英文原文(CBO determines join order from costs derived from gathered statistics. If there are n…

今日头条PHP开发工程师面试,今日头条2018春招研发岗第一次笔试题解

第一题:双指针:#include using namespace std;typedef long long ll;const int N 1e67;int a[N];int main(){int n,k;scanf("%d%d",&n,&k);for(int i0;isort(a, an);n unique(a, an) -a;int r 0, ans0;for(int l0; l{while(rif(rn)…

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 如何清理垃圾文件,Linux系统怎样清理垃圾文件

大家都用过windows,在使用windows系统的过程中系统会变得越来越慢。而对于windows下饱受诟病的各种垃圾文件都需要自己想办法删除,不然系统将会变得越来越大,越来越迟钝!windows怎么清理垃圾相信大家都知道的,那么linux下怎么清理…

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…

ubuntu linux编译环境搭建,Ubuntu14.04开发环境搭建

Ubuntu14.04开发环境搭建嵌入式开发过程中很重要的一环节就是开发环境的搭建,开发环境搭建的好可以很好的提高开发效率。其中关键的一部就是挂载运行程序,对于程序的挂载运行需要借助NFS服务器,下面介绍windows和linux操作系统下NFS服务器的搭…

linux arm下硬件驱动程序放哪里,Arm-Linux摄像头驱动程序的移植

Arm开发板上摄像头的移植有两种方法:第一,将驱动程序添加到内核,通过编译内核,烧写到板子上;第二种,通过动态加载摄像头驱动模块的方法进行硬件的驱动。作者首先在PC的linux系统进行摄像驱动程序的移植&…

linux一级常用目录,小蚂蚁学习Linux(3)——Linux一级目录说明和常用命令解释...

根目录下的一级目录解释说明:/etc 配置文件目录 /home 普通用户家目录/bin 命令保存目录 /lib 系统库保存目录/boot 启动目录,启动相关文件 /mnt 系统挂载目录/dev 设备文件保存目录 /media…

linux一键打包工具,常见压缩与打包工具

第二周作业1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。3、请使用命令行展开功能来完成以下练习:(1)、创建/tmp目录下的:a_c, a_d,…

Linux+c+线程的属性,C ++中的多线程

多线程是多任务的一种特殊形式,多任务是一种功能,它使您的计算机可以同时运行两个或多个程序。通常,多任务有两种类型:基于进程和基于线程。基于进程的多任务处理程序的并发执行。基于线程的多任务处理并发执行同一程序的各个部分…

linux shell 除法运算符,Linux shell 基本运算符详解

shell 支持多种运算符1.算数运算符2.关系运算符3.布尔运算符4.字符串运算符5.文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表…

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服务…

linux runqueue定义,linux – 了解rt_rq(实时runqueue)内核中数据成员的使用

以下是v3.5.4中的实时运行队列结构struct rt_rq {struct rt_prio_array active;unsigned int rt_nr_running;#if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHEDstruct {int curr; /* highest queued rt task prio */#ifdef CONFIG_SMPint next; /* next highest */#end…

Linux7安装gi报错,Redhat 7.6安装11G RAC GI时遇到此类报错

环境:Redhat Linux 7.6 Oracle 11.2.0.4 RAC现象:图像化安装过程中,按照提示执行root.sh脚本,报错中断。1. 具体现象[rootmm1903 ~]# /u01/app/11.2.0/grid/root.shPerforming rootuser operation forOracle 11gThe following en…

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

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