`
sammor
  • 浏览: 413761 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

存储过程作业

Go 
阅读更多
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



-- 商品出货
-- 返回: -1  数据 overflow
ALTER PROCEDURE [dbo].[ap_PopPro]
@pro_id  int, --产品ID
@wh_id  int, --仓库号
@num  int     --出库数量

AS
BEGIN
declare
  @pos1  int, --起始位置
  @pos2  int, --可放位置
  @curPos  int, --当前位置
  @totNum  int, --总的数量
  @curNum  int , --当前位置的数量
  @curtotNum  int, --当前商品总数量
  @totPrice money,  --总的出货价
  @curPrice money   --当前批的出货价

declare
  @sqlCmd  nvarchar(200),
  @fldNum  varchar(10),
  @fldPrice varchar(10)
--初始化出货总价
    set @totPrice = 0 

--查找对应产品的记录
select @pos1 = pos1, @pos2 = pos2, @totNum = totNum
  from whproduct
  where pro_id = @pro_id and wh_id = @wh_id
   
if  @totNum < @num   --产品数量不够,刚退出
begin
  print 'The number of the product is not enough'
  return -1
end

laber1:
    set @fldNum = 'num' + Convert(varchar(2), @pos1)  --得到当前num字段
set @fldPrice = 'price' + Convert(varchar(2), @pos1)
set @sqlCmd = 'select ' + '@curNum ='+ @fldNum+ ' ,@curtotNum = totNum'
+ ',@curPrice='+@fldPrice +' from whproduct where pro_id = @pro_id and wh_id = @wh_id'
exec   sp_executesql   @sqlCmd,N'@curNum int output ,@curtotNum int output, @curPrice money output ,@pro_id int,@wh_id int',@curNum output ,@curtotNum output,@curPrice output,@pro_id,@wh_id

set @curPos = @pos1  --一开始的初始化curPos 与@pos1相等,用于后面价格是否需要置0做准备
if @curNum >=@num  --当前位置的商品数量大于或等于要求的数量时
begin
  set @curNum = @curNum - @num
  set @curtotNum = @curtotNum - @num
  set @totPrice = @totPrice + @curPrice*@num
  set @num = 0  --取出数量全总,所以设为0
 

  if @curNum = 0
   begin
    set @pos1 = @pos1 +1
   end
end
else    --当前位置的商品数量小于要求的数量时
  begin
   set @num = @num - @curNum
   set @totPrice = @totPrice + @curPrice*@curNum
   set @curtotNum = @curtotNum - @curNum
   set @curNum = 0
   set @pos1 = @pos1 + 1
  
  end

  if @curPos != @pos1  --当发现当前位置的商品都被取光的时候,该位置的进货价格清0
   begin
    set @fldPrice = 'price' + Convert(varchar(2), @curPos)
    set @sqlCmd = 'update whProduct set ' + @fldprice + ' = ' + Convert(varchar(10), 0)
    +' where  pro_id = @pro_id and wh_id = @wh_id'
    exec sp_executesql @sqlCmd, N'@wh_id int, @pro_id int', @wh_id, @pro_id
   end
 
  if @pos1 = @pos2   --当位置1到达位置2时,也就相当于仓库里面没货了,这时应该把@pos1返回
  begin
   set @pos1 = 1
   set @pos2 = 1
  end

  --当前位置被置0后,修改数据表中的值
 
  set @sqlCmd = 'update whProduct set pos1 = ' + Convert(varchar(2), @pos1) + ',pos2 = ' + Convert(varchar(2), @pos2) +', totNum =  '
   + Convert(varchar(5), @curtotNum)  +  ',' + @fldNum +'='+ Convert(varchar(5), @curNum)+
  ' where  pro_id = @pro_id and wh_id = @wh_id'
  exec sp_executesql @sqlCmd, N'@wh_id int, @pro_id int', @wh_id, @pro_id
 
      
  if @num != 0
  begin
   goto laber1  --如果需要的商品数量还没有得到,则回到前面部分,进而得到循环的目的
  end
 
  print '出货成功--'
  print '出货数量为:'
  print @totNum - @curtotNum
  print '出货总价为:'
  print @totPrice
 
END


分享到:
评论

相关推荐

    【数据库作业14】第五章: 数据库完整性 习题 + 存储过程

    总结来说,这个作业涵盖了数据库完整性中的数据统计分析、存储过程的创建与执行,以及数据类型的转换。这些知识点在实际的数据库管理与应用中非常常见,理解和掌握这些技能对于数据库开发者和管理员至关重要。

    触发器、存储过程等上机作业

    ### 触发器、存储过程等上机作业 #### 知识点1:创建存储过程——统计特定条件下的学生人数 在SQL Server中,存储过程是一种预编译的SQL语句集合,它能够提高数据库应用系统的性能,并简化复杂的业务逻辑处理。本...

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...

    实验9 存储过程的创建和使用

    实验9主要围绕存储过程的创建、使用、查看、修改和删除等核心概念展开,这是数据库管理系统中的重要组成部分,尤其在SQL Server中具有广泛的应用。存储过程是一组预先编写的SQL语句,它允许用户像调用函数一样重复...

    实验六:创建存储过程和触发器1

    实验六的目的是深入理解并掌握SQL Server中的存储过程和触发器。存储过程是预编译的SQL语句集合,它们可以被多次调用,提高了代码的重用性和执行效率,同时降低了网络流量。以下是关于存储过程和触发器的详细解释: ...

    自动备份SQL SERVER数据库的作业的脚本及存储过程(学习)

    ### 自动备份SQL Server数据库的作业的脚本及存储过程详解 #### 一、背景介绍 在企业级应用中,数据库备份是一项非常重要的任务。它不仅能够帮助组织防止数据丢失,还能确保数据的一致性和可用性。对于SQL Server...

    oracle 定时任务,使用存储过程更新数据

    2. **创建调度器作业**:接下来,我们需要使用DBMS_SCHEDULER来创建一个作业,该作业将在指定的时间调用我们的存储过程。下面是如何创建一个作业的示例: ```sql BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name =&gt; ...

    oracle存储过程+日期+定时任务Job

    ### Oracle 存储过程 + 日期 + 定时任务 Job #### 一、概述 在 Oracle 数据库中,存储过程是一种可编程的对象,用于执行特定的任务。存储过程可以在数据库服务器上运行,从而提高应用程序的性能并减少网络流量。...

    数据库实训大作业(增删改查,视图,存储过程,触发器)

    视图,触发器,存储过程,ER图.sqlserver数据库实训,广告公司管理系统,sqlsever数据库大作业,包括增删改查。。视图,触发器,存储过程,ER图.sqlserver数据库实训,广告公司管理系统,sqlsever数据库大作业,包括...

    Oracle存储过程调用bat批处理脚本程序

    Oracle作为一个强大的关系型数据库管理系统,不仅提供了数据存储和查询的功能,还允许我们通过存储过程来执行更复杂的业务逻辑。本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT...

    第8章 存储过程的操作与管理 sql server

    【存储过程概述】 存储过程是数据库管理系统中的一种重要特性,它是预先定义并编译好的一组SQL语句,存储在数据库中以供重复调用。在SQL Server中,存储过程有诸多优点,包括: 1. **注册在服务器上**:存储过程在...

    存储过程中查找关键字

    存储过程中查找关键字,存储过程,关键字,查询存储过程关键字

    教程\存储过程和触发器.ppt

    教程\存储过程和触发器.ppt

    SQL SERVER定时作业的设置方法

    这通常包括但不限于运行SQL脚本、存储过程或其他管理任务。以下将详细解释如何设置SQL Server定时作业。 1. **新建作业** - 在SQL Server Management Studio (SSMS)中,首先导航至“管理”菜单,然后选择“SQL ...

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    11.6.3 用于维护作业的存储过程 11.6.4 操作员和报警 11.7 SQL Server和Web 11.7.1 Web Assistan 11.7.2 Web任务存储过程 11.7.3 sp_makewebtas 11.7.4 sp_runwebtas 11.7.5 sp_dropwebtas 11.7.6 Web页模板 11.8 串...

    job调用的存储过程

    在IT行业中,"job调用的存储过程"是一个常见的数据库管理任务,主要涉及数据库调度和自动化操作。这里我们将深入探讨这个主题,以及与之相关的标签"job",并结合提供的压缩包子文件名称来推测可能的应用场景。 首先...

    基于SQL Server作业 扩展存储过程实现数据库自动远程备份.pdf

    "基于SQL Server作业扩展存储过程实现数据库自动远程备份.pdf" 数据库自动远程备份是数据库管理中非常重要的一环,尤其是在大型企业中,数据的安全和可靠性对业务的影响非常大。如果数据库发生崩溃或遭受攻击,导致...

    存储过程 自定义函数 作业 - 参考答案.sql

    存储过程 自定义函数 作业 - 参考答案.sql

    设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。

    设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。假设初始状态下,可用的内存空间为640KB,并有下列的请求序列: 作业1申请130KB 作业2申请60KB 作业3申请100KB 作业2释放60KB 作业4申请200...

Global site tag (gtag.js) - Google Analytics