说说oracle中的面向对象与面向集合
这一篇算是对近期自己学习的一个心得总结
一、oracle的面向对象
SQL是面向集合的这个大家都知道,但是不可否认现在的oracle中有很多地方都体现着面向对象的思维。(这也算是各大语言殊途同归的一个征兆吧)
为什么说oracle中有很多的面向对象的思维呢?举一个例子来说明一下,我觉得最能体现出来这一点要算是游标了,当然还有包(package)
- begin
- declare
- cursor students
- is
- select sid,name,age,hobby from my_test;
- student students%rowtype;
- begin
- for student in students loop
- dbms_output.put_line('学号:'||student.sid||'学生姓名:'||student.name||';');
- end loop;
- end;
- end;
- --运行结果
- 学号:76学生姓名:joy;
- 学号:77学生姓名:joy;
- 学号:78学生姓名:joy;
- 学号:79学生姓名:joy;
- 学号:80学生姓名:joy;
- 学号:81学生姓名:joy;
- 学号:82学生姓名:joy;
- 学号:83学生姓名:joy;
- 学号:84学生姓名:joy;
- 学号:85学生姓名:joy;
- 学号:86学生姓名:joy;
- 学号:87学生姓名:joy;
- 学号:88学生姓名:joy;
- 学号:89学生姓名:joy;
- ……
其中的for循环有没有很有C#中foreach的赶脚呢?
student.sid没有有对象的赶脚呢?
另外包(package)也是一个具有很强的面向对象的家伙儿,比如最常使用的dbms_output.put_line()等等一些内置的函数,很有面向对象中类和方法的赶脚,只是oracle不这么叫罢了。面向对象是一种思维模式,也许oracle在不断的更新过程中也借鉴了一些这方面的内容,方便开发者更加快速更加舒服的使用也说不定。
接下来在谈谈oracle的面向集合
二、oracle的面向集合
SQL是面向集合的,在oracle集合这篇博客中自己也写了一些东西,此处着重写一些自己在这方面的一些见解。
关系型数据库是按照一定的关系把业务数据按照一定的相同性整合在一起,SQL语句是为了更好的处理这些数据而存在的,所以想要提升SQL的效率,很多时候就需要知道oracle到底是怎么工作的,他在运行一段SQL语句时,是按照什么样的顺序来实现自己对于数据的处理的,这就牵扯到了解释计划和执行计划。
oracle10g以后采用的是基于开销的优化器(CBO),通过统计出来的一些数据来运行众多执行计划中的一种,当然这一种并不一定是最高效和稳定的。
用集合的思想来进行编程,为的就是尽可能的减少对数据块的读取,因为一般情况下在I/O方面花费的效率还是很可观的,另外使用面向集合的方法也可以使SQL看起来更加的简洁明了,优雅动人。不过这些需要一个过程
最后借用别人的一句话,做一个虎头虎脑的结尾:谁都能写出计算机认识的代码,但是只有有思想的程序员才能写出人人都能看懂的程序代码
说说oracle中的面向对象与面向集合的更多相关文章
- python中的面向对象和面向过程
一.面向对象和面向过程 一.什么是面向过程 核心是过程二字:面向过程是一种流水线的工作流程,是先做什么在做什么 二.什么是面向对象 核心 是对象二字:是一种编程思想,上帝思维,一切皆对象,编程中负责调 ...
- 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...
- 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
- 彻底理解Oracle中的集合操作与复合查询
--Oracle中的复合查询 复合查询:包含集合运算(操作)的查询 常见的集合操作有: union: 两个查询的并集(无重复行.按第一个查询的第一列升序排序) union all:两个查询的并集(有重 ...
- Oracle中的集合运算
前言:在实际项目中对多表进行集合运算使用非常广泛,以下是对集合操作的部分总结. 一,建表,插入测试数据 create table a( numbers integer ) create table b ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- mysql 面向集合查询
面向集合的思想 SQL是为查询和管理关系型数据库中的数据而专门设计的一种标准语言.我们通常认为的关系型是说的数据库中表与表的关系,这个理解是有问题的,这里的关系其实是数学术语上的关系.为什么这么说?因 ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- C#学习笔记——面向对象、面向组件以及类型基础
C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...
随机推荐
- 如何切换android的横屏与竖屏?
选中需要切换的模拟器,按住CTRL+F11或者CTRL+F12即可进行切换.
- C++三种内存分配方式
从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出.只 ...
- 1.7见识一下什么叫Linux驱动:LED
1.任何的Linux驱动都有一个装载函数(装载驱动时调用)和一个卸载函数(卸载驱动时调用): 2.装载函数和卸载函数分别通过module_init和module_exit宏指定.
- RedHat安装VMwareTools出现解压压缩包时无法打开文件的现象
出现这种情况的原因是因为解压命令没有加—C参数,使用的命令为:tat -xvzf VMware Tools: 正确的解压命令应该是: tar -xvzf VMware Tools -C /opt,加上 ...
- slf4j+log4j配置
下载三个包: 三个包分别是:log4j的API包,slf4j的API包,slf4j对log4j的适配包. 选择使用slf4j一个重要的原因是支持占位符{},不用频繁操作字符串对象. 实现代码如下: i ...
- 如何解决谷歌浏览器下jquery无法获取图片的尺寸
代码如下: $(document).ready(function(){ var img_h=$img.height(); var img_w=$img.width(); }) 以上代码在IE和火狐中没 ...
- CentOS编译安装lamp
LAMP环境搭建(编译安装CentOS+httpd2.2+mysql5.5+php5.4) 首先准备以下压缩包 <ignore_js_op> (1)编译安装apache 1.配置防火墙,开 ...
- 小菜的系统框架界面设计-数据的完美呈现(DataGridView扩展)
背景 今天在做系统报表的过程中,我想实现批量操作DataGridView中的数据,在列中加复选框,通过一个事件触发进行全选或取消,可是在外面添加按钮,这种模式虽然能够实现,但是从系统界面设计的角度,美 ...
- Hbase的Observer
hbase提供了类似于触发器的组件observer,类似于存储过程的endpoint. hbase中的observer分别三类,MasterObserver.RegionObserver.WALObs ...
- Hbase Interface HConnection
HTablePool 在Hbase 0.94.0.95.0.97被废弃,在0.98中被清除( HTablePool 对比HConnection.getTable),hbase0.98 HTablePo ...