存储过程的认识

1.什么是存储过程

存储过程就是由一些SQL语句和控制语句组成的被封装起来的过程。它们驻留在数据库中,可以被客户应用程序调用

2. 使用存储过程的好处

(1)减少网络通讯量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。

(2)加快执行速度。由于存储过程首次运行时被编译,这将产生一个执行计划,然后执行计划在内存中得到缓存,以备以后调用,可以改善存储过程的性能。

(3)可维护性和抽象性。理想情况下,数据库架构从不更改,业务规则不被修改,但在现实环境中,情况则完全不同。既然情况如此,那么如果可以修改存储过程以包括新 X、Y 和 Z 表(为支持新的销售活动而添加了这些表)中的数据,而不是在应用程序代码中的某个位置更改此信息,则维护对您来说可能比较容易。在存储过程中更改此信息使得更新对应用程序而言具有透明性 - 您仍然返回相同的销售信息,即使存储过程的内部实现已经更改。更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。另外,通过抽象化实现并将此代码保存在存储过程中,任何需要访问数据的应用程序均可以获取一致的数据。您无需在多个位置维护相同的代码,用户便可获取一致的信息。

(4)安全性。就管理用户对信息的访问而言,通过向用户授予对存储过程(而不是基础表)的访问权限,它们可以提供对特定数据的访问。存储过程还可以帮助您解决代码安全问题。它们可以防止某些类型的 SQL 插入攻击 - 主要是一些使用运算符(如 AND 或 OR)将命令附加到有效输入参数值的攻击。在应用程序受到攻击时,存储过程还可以隐藏业务规则的实现。这对于将此类信息视为知识产权的公司非常重要。

3.语法

(1)创建不带参数的存储过程

CREATE PROCEDURE p()

BEGIN

.....

END;

调用: call p()

(2) 创建带参数的存储过程

CREATE PROCEDURE p(in onumber int, out ototal decimal(8,2))

BEGIN

  select sum(item_price * item_quanty)

  from order_item

  where order_number = onumber

  into ototal;

END;

调用:call p(2012, @total);

select @total;

删除存储过程:

DROP PROCEDURE procedure_name;

原文地址:https://www.cnblogs.com/306b/p/2826120.html