oracle先进先出游标,利用游标进行简单的数据先进先出操作

创建数据库

if exists (select * from sysobjects where id = OBJECT_ID('[入库信息]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [入库信息]

CREATE TABLE [入库信息] ( [名称] [varchar] (40) NULL , [规格型号] [varchar] (40) NULL ,  [入库数量] [int] NULL ,  [出库数量] [int] NULL ,  [库存数量] [int] NULL , [入库时间] [datetime]  NULL )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存1' , 'PC530' , 520 , 0 , 520 , '2010-02-10 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存1' , 'PC100' , 100 , 0 , 10 , '2010-02-02 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'PC100' , 20 , 0 , 20 , '2010-10-01 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'PC200' , 50 , 0 , 50 , '2010-10-02 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'PC200' , 80 , 0 , 80 , '2010-10-04 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'DDR2' , 82 , 0 , 82 , '2010-10-03 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '主板' , 'P43' , 532 , 0 , 532 , '2010-08-09 00:00:00.000' )

INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '主板' , 'P35' , 84 , 0 , 84 , '2010-10-25 00:00:00.000' )

代码

--利用游标对数据进行先进先出

--按时间排序库存物资,逐条记录进行出库,当前行库存不够对下一行库存进行出库,直到出库完成

use temp

Declare @入库时间 DateTime

Declare @名称 varchar(40)

Declare @入库数量 int

declare @库存数量 int

declare @出库数量 int

Declare @i int  --定义出库数量变量,传入的参数

set @i=82   --设置传入的出库数量

Declare cur_Depart Cursor For  --定义游标

Select [名称] , [入库时间] ,[入库数量] ,[库存数量] , [出库数量] from 入库信息 Where 名称 = '内存' and 库存数量  <> 0 Order by 入库时间 desc

Open cur_Depart --创建游标

Fetch From cur_Depart into @名称 , @入库时间  , @入库数量 , @库存数量  ,@出库数量

While @@Fetch_Status = 0 --循环读取

Begin

--判断是否已经出库完成或出库数量是否为0

if @i > 0

begin

if @库存数量 >=@i --如果当前记录的库存大于或等于要出库数量则执行

begin

update 入库信息 set 库存数量 = 库存数量 - @i where 入库时间 = @入库时间

update 入库信息 set 出库数量 = 出库数量 + @i where 入库时间 = @入库时间

set @i = 0

end

if @库存数量 < @i and @库存数量 <> 0 --如果当前记录库存如果小于或等于要出库数量则执行

begin

update 入库信息 set 库存数量 = 0 Where 入库时间 = @入库时间

update 入库信息 set 出库数量 = 出库数量 + @库存数量 where 入库时间 = @入库时间

set @i = @i - @库存数量

end end  Fetch From cur_Depart into @名称 , @入库时间  , @入库数量 , @库存数量 , @出库数量   --下一条记录 EndClose cur_Depart --关闭游标Deallocate cur_Depart  --释放资源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值