天天看点

ORACLE存储过程学习(一)

  作为一枚刚入职,或者渴望入职的程序员来说。很多时候面试的时候会问到一个问题,有没有数据库调优相关经验。或者直白一点,你用过了解过哪些数据库?当然泛泛而谈的的回答可能是,“有用过MySql,了解过Oracle...”。其实答到这儿的时候,基本上就会有下一个问题,有了解过存储过程,触发器吗?谈到这儿可能很多人都会卡壳,毕竟对于刚要入职的小白来说这两个词汇显得优先生僻了。那么本篇文章,大致跟大家聊一下有关存储过程的二三事。

  笔者从入行时一直在做企业级应用开发(ERP一块),最开始我也只是会用DDL、DML 语句,当然了在后台业务的开发中熟练的使用这些是基本的要求,毕竟大多数的逻辑就是CRUD。但是后来随着功能的复杂性增加,突然有一天发现程序在执行一个查询过程时变得非常慢(数据样本过大,五表联查),究其原因发现原来是sql编译太慢了,再加上一味地用Left join 导致程序假死。后来在当时的经理的指导下,一张视图(View)搞定了。当时就觉得异常神奇,后来再自己的百度,以及尝试下写了第一个过程,建了第一张视图。自此数据库层面有提高了一点点。

  回到正题,很多人问存储过程是什么呢?其实存储过程就是在数据库层面去做CRUD,可以完全脱离程序而独立运行。在这sql中加上相关的表操作。当然了,这些操作理论上完全通过程序去做也是可行的。那么为什么会多此一举呢?万事万物皆有它存在的意义。后面来讲讲他的优点

(一)存储过程处理比较复杂的业务时比较实用。

比如,一个复杂的数据操作(涉及到多次查询多次判断且要用一个事物去控制),如果你在前台处理的话,可能会涉及到多次数据库连接。但如果你用存储过程的话,只需要传几个关键参数,然后获取结果集(Status)。从响应时间上来说有绝对优势,将应用服务器的压力分给了数据库服务。

也就是说存储过程可以给我们带来运行效率提高的好处。

另外,程序容易出现 BUG 不稳定,而存储过程,只要数据库不出现问题,基本上是不会出现什么问题的。也就是说从安全上讲,使用了存储过程的系统更加稳定。

(二)大量数据处理

在开发过程中涉及到在一个方法中处理大量数据,数据与数据之间打交道的话,过程会比程序来的快的多。面试官问有没有用存储,实际上就是想知道前来面试的程序员到底做过数据量大的项目没。

所以,要想进大公司,没有丰富存储过程经验,是不行的。

(三)与后台程序脱离

存储过程固化在数据库,与开发的语言无关,只要正确的调用,参数传递正确。不需要根据编程语言的不同再去做相关的修改,一般不做大的修改。当需要有多次调用时不需要再次编写,且过程只在创建完毕一次编译。

上面就是我总结的有关存储过程使用的一些优点,缺点也很明显。正因为存储过程是一次创建,当应用运行时间很长需要升级的话如果涉及到存储过程的修改需要异常谨慎,且繁琐(有可能需要手动调历史数据,且后台程序也要相应的改变),对后台对接的程序来说改动量巨大。

其他的还在探索中。。。不定时更