第十九课(二) 使用存储过程

第十九课(二)   使用存储过程


        在Orders表中插入一个新订单。此程序仅适用于SQL Server,但它说明了存储过程的某些用途和技术:
        输入▼
CREATE PROCEDURE NewOrder @cust_id CHAR(10)
                AS-- Declare variable fororder number
DECLARE @order_num INTEGER
-- Get current highest order number
               SELECT@order_num=MAX(order_num)
                             FROM Orders
-- Determine next order number
SELECT @order_num=@order_num+1
             -- Insert new order
INSERT INTO Orders(order_num, order_date, cust_id)
            VALUES(@order_num, GETDATE(),@cust_id)
-- Return order number
            RETURN @order_num;
        分析此存储过程在Orders表中创建一个新订单。它只有一个参数,即下订单顾客的ID。订单号和订单日期这两列在存储过程中自动生成。代码首先声明一个局部变量来存储订单号。接着,检索当前最大订单号(使用MAX()函数)并增加1(使用SELECT语句)。然后用INSERT语句插入由新生成的订单号、当前系统日期(用GETDATE()函数检索)和传递的顾客ID组成的订单。最后,用RETURN@order_num返回订单号(处理订单物品需要它)。请注意,此代码加了注释,在编写存储过程时应该多加注释。
        说明:注释代码
        
应该注释所有代码,存储过程也不例外。增加注释不影响性能,因此不存在缺陷(除了增加编写时间外)。注释代码的好处很多,包括使别人(以及你自己)更容易地理解和更安全地修改代码。对代码进行注释的标准方式是在之前放置--(两个连字符)。有的DBMS还支持其他的注释语法,不过所DBMS都支持--,因此在注释代码时最好都使用这种语法。
        下面是相同SQL Server代码的一个很不同的版本:
输入▼
CREATE PROCEDURE NewOrder @cust_id CHAR(10)
                AS-- Insert new order
INSERT INTO Orders(cust_id)
                VALUES(@cust_id)
                                -- Returnorder number
SELECT order_num = @@IDENTITY;
          分析此存储过程也在Orders表中创建一个新订单。这次由DBMS生成订单号。大多数DBMS都支持这种功能;SQL Server中称这些自动增量的列为标识字段(identity field),而其他DBMS称之为自动编号(autonumber)或序列(sequence)。传递给此过程的参数也是一个,即下订单的顾客ID。订单号和订单日期没有给出,DBMS对日期使用默认值(GETDATE()函数),订单号自动生成。怎样才能得到这个自动生成的ID?在SQL Server上可在全局变量@@IDENTITY中得到,它返回到调用程序(这里使用SELECT语句)。可以看到,借助存储过程,可以有多种方法完成相同的工作。不过,所选择的方法受所用DBMS特性的制约。

你可能感兴趣的:(SQL基础学习)