数据库中存储过程的入门

   昨晚QQ群里有人问了几个关于存储过程的问题,正好以前对数据库里面的内部执行机制进行过研究,所以对存储过程的原理以及如何使用还是有所掌握。首先提出二个问题,什么是存储过程,以及存储过程有什么用呢?存储过程就是SQL语言的函数,而我们可以把SQL语言看成像CJAVA一样的语言,当然SQL语言比C,JAVA要简单的多,它只有数据定义,操纵等语句,如SELECT,INSERT,DELETE等,我们可以把这些语句就看成是C,JAVA中的一个+-等操作。所以说白了存储过程就跟C,JAVA中函数类似,是包含了多个SQL语句的过程,同样作为函数,它也有输入参数,也有输出参数,这些参数都有类型,类型可以是字符,整型,数组集合等类型,当然在不同的数据库下各种类型可能是用不同的字符串来表示的。

     那么为什么要用存储过程,而不是直接操纵SQL语句?最大的不同就是存储过程中SQL语句连续的执行的,意思就是数据库会一次性的从头到尾把存储过程中的SQL语句执行完,而如果不写存储过程的话,意思就是说把存储过程中的SQL语句都分开,一条一条的间断地执行,为什么会是间断的呢?因为我们可以知道数据库都是要面向多用户的,是要分时来执行SQL语句,当有多个用户要执行SQL语句,数据库执行完一个用户的一条SQL后,再会去执行另一个用户的SQL语句,可能是按时间先后或者是优先级来执行SQL,这样,如果一个用户需要连续执行多个SQL语句的话,数据库中在这中间可能就会去执行其他用户的SQL语句,而不能完成专注于该用户,所以如果用了存储过程的话,在进入了存储过程后,数据库一心一意把这个存储过程执行完后,才会去执行其他任务,这样就减少了执行时间,提高了速度。另外,有些情况下,一个SQL执行完的结果可能需要给下个SQL语句用,如果不用存储过程的话,那么就需要我们的应用程序先暂存这些临时结果,然后再把临时结果传给下个SQL,这样明显增加了应用程序与数据库之间的通信时间,所以利用存储过程也可以减少通信时间。总之,当需要执行多条SQL语句才会得到所需的结果时,可以把这些关于SQL语句的逻辑操作放到存储过程中一次执行完,提高执行的时间。

       前面讨论了存储过程的含义和作用,那么我们在应用中如何去定义一个存储过程,以及应用程序如何调用存储过程呢?定义存储过程跟我们在C,JAVA中定义函数是类似的,基本元素就是SQL语句以及一些分支结构。如if语句,while语句等。所以关键是弄清楚存储过程需要进行的逻辑操作,也就是我们所说的工作流程,或者是伪代码吧。相信学过C,JAVA或其他语言,对这个都很熟了。当然里面具体的语法知识,不清楚的可能就需要到网上去找答案,这个将不是难点了。另外应用程序就像执行SQL语句的调用方法类似的调用存储过程,比如JAVA语言中的JDBCConnection 类中的方法prepareCall(String sql),其中SQL形式就是{call <procedure-name>[<arg1>,<arg2>, ...]},然后利用CallableStatement 中的SET方法设定参数,调用getResultSet();方法就可以得到存储过程最终返回的结果。在http://czqhh.bloghome.cn/posts/38543.html中有一个简单的实例可以参考。

      最后,存储过程的关键还是如何构建存储过程的逻辑的操作过程,即工作流程,这个知道了后,再去写存储过程就不难了,只是具体语法实现而已。写了这么多,都是自已学习过程的感悟而已,望对初学者有用。呵。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值