欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Orders表使用存储过程

程序员文章站 2023-03-27 22:31:52
使用存储过程 在Orders表中插入一个新订单。此程序仅适用于SQL Server,但它说明了存储过程的某些用途和技术: 输入▼ CREATE PROCEDURE NewOr...

使用存储过程

在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特性的制约。