zoukankan      html  css  js  c++  java
  • 存储过程的认识

    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;

  • 相关阅读:
    LVM逻辑卷管理练习
    浅谈TCP三次握手和四次分手
    centos模拟创建CA和申请证书
    破解root口令
    shell脚本编程进阶总结
    基于FIFO的串口发送机设计
    流水线方式LUT查表法乘法器
    verilog中有符号整数说明及除法实现
    LUT查表法乘法器所犯下错误。。。。
    似然函数
  • 原文地址:https://www.cnblogs.com/306b/p/2826120.html
Copyright © 2011-2022 走看看