zoukankan      html  css  js  c++  java
  • SQL 必知必会·笔记<17>使用存储过程

    存储过程就是为以后使用而保存的一条或多条SQL 语句。可将其视为批文件,虽然它们的作用不仅限于批处理。

    1. 存储过程的优点和缺点

    存储过程的优点:

    使用存储过程有三个主要的好处,即简单、安全、高性能:

    • 通过把处理封装在一个易用的单元中,可以简化复杂的操作
    • 由于不要求反复建立一系列处理步骤,因而保证了数据的一致性。可以防止错误。需要执行的步骤越多,出错的可能性就越大。
    • 简化对变动的管理。提高安全性。通过存储过程限制对基础数据的访问,减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会
    • 存储过程通常以编译过的形式存储,所以DBMS处理命令的工作较少,提高了性能
    • 存在一些只能用在单个请求中的SQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码

    存储过程的缺点

    • 不同DBMS中的存储过程语法有所不同。可移植性差
    • 编写存储过程比编写基本SQL语句复杂,需要更高的技能,更丰富的经验

    2. 执行存储过程

    执行存储过程的SQL语句很简单,即EXECUTE。EXECUTE接受存储过程名和需要传递给它的任何参数。

    1 EXECUTE AddNewProduct('JTS01', 
    2                       'Stuffed Eiffel Tower', 
    3                       6.49,
    4                       'Plush stuffed toy with the text La Tour Eiffel in red white and blue' );

    3. 创建存储过程

    SQL Server版本创建存储过程示例:

     1 CREATE PROCEDURE NewOrder @cust_id CHAR(10)
     2 AS
     3 -- Declare variable for order number
     4 DECLARE @order_num INTEGER
     5 -- Get current highest order number
     6 SELECT @order_num=MAX(order_num)
     7 FROM Orders
     8 -- Determine next order number
     9 SELECT @order_num=@order_num+1
    10 -- Insert new order
    11 INSERT INTO Orders(order_num, order_date, cust_id)
    12 VALUES(@order_num, GETDATE(), @cust_id)
    13 -- Return order number
    14 RETURN @order_num;

    分析

    此存储过程在Orders表中创建一个新订单。它只有一个参数,即下订单顾客的ID。订单号和订单日期这两列在存储过程中自动生成。代码首先声明一 个局部变量来存储订单号。接着,检索当前最大订单号(使用MAX()函数)并增加1(使用SELECT语句)。然后用INSERT语句插入由新生成的订单 号、当前系统日期(用GETDATE()函数检索)和传递的顾客ID组成的订单。最后,用RETURN @order_num返回订单号(处理订单物品需要它)。

    调用

    1 CREATE PROCEDURE NewOrder @cust_id CHAR(10)
    2 AS
    3 -- Insert new order
    4 INSERT INTO Orders(cust_id)
    5 VALUES(@cust_id)
    6 -- Return order number
    7 SELECT order_num = @@IDENTITY;

    说明:注释代码

    应该注释所有代码,存储过程也不例外。增加注释不影响性能,因此不存在缺陷(除了增加编写时间外)。注释代码的好处很多,包括使别人(以及你自己)更容易地理解和更安全地修改代码。

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/IPrograming/p/3340345.html
Copyright © 2011-2022 走看看