存储过程 游标的使用

项目中有个需求领取的款项过期后自动释放,此处我用了游标来实现,上代码

USE [QHWCloud]
GO
/****** Object:  StoredProcedure [dbo].[pro_Shifang]    Script Date: 05/26/2017 15:04:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   PROCEDURE  [dbo].[pro_Shifang]
as
declare @id int;
declare @money decimal;
declare @miid int;
declare @SumMoney decimal;
declare @linShimoney decimal;
declare @Paymoney decimal;
DECLARE  CUR_GuoQi CURSOR scroll For --创建游标,查询过期数据
    select mr_id,mi_id,mi_receivermoney from t_money_receive t  where t.mi_endtime< GETDATE() and t.mi_state=1  ;
open CUR_GuoQi;  --打开游标
begin
fetch first from CUR_GuoQi into @id,@miid,@money  --我理解为此处获取游标的第一行
While @@FETCH_STATUS=0   ---返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
if(@id!=‘‘)
begin
    update t_money_receive set  t_money_receive.mi_state=2 where t_money_receive.mr_id=@id; --将该条申请记录状态修改为2 ,释放

    set @linShimoney=(select t_money_info.mi_surplusmoney  from t_money_info where t_money_info.mi_id=@miid); --查询可用余额

    set @SumMoney=@linShimoney+@money; --重新计算可用余额

    set @Paymoney=(select pay_money  from t_money_info where t_money_info.mi_id=@miid) --查询款项的支付金额

    if(@Paymoney=@SumMoney) --释放后没有其他的领取申请
     begin
       update t_money_info set t_money_info.mi_surplusmoney=@SumMoney , t_money_info.mi_state=1 where t_money_info.mi_id=@miid; --将领取金额返回到款项可用金额中,并且将状态修改为未领取
     end
     else
        update t_money_info set t_money_info.mi_surplusmoney=@SumMoney, t_money_info.mi_state=2 where t_money_info.mi_id=@miid; --将领取金额返回到款项可用金额中,并且将状态修改为部分领
fetch next from CUR_GuoQi into @id,@miid,@money   -----提前下一条 信息
  end
end
Close CUR_GuoQi;----关闭游标
deallocate CUR_GuoQi ------删除游标
时间: 2024-10-17 13:17:42

存储过程 游标的使用的相关文章

存储过程 游标

CREATE PROCEDURE [dbo].[RuleExecute_Temp] AS declare @executedate varchar(20) declare @branchcode varchar(50) declare @rulenumber varchar(50) declare @number varchar(20) declare @JLWZCode varchar(20) declare cur cursor for SELECT ExcuteDate,RuleNumbe

存储过程 游标 事例

Create PROC [GetPerformance] ( @vp varchar(25), @range char(1) , @depetid int , @Q varchar(1), @QBeginDate datetime , @QEndDate datetime , @YBeginDate datetime , @YEndDate datetime ) AS Begin --1:创建临时表存储全部数据的容器 Create Table #MyTempTable ( Did int , M

一次使用存储过程游标遇到的坑

一次使用存储过程游标遇到的坑 有这样一个需求:统计某省某市某区前6个月的数据,直接sql查询效率很低,于是打算做定时任务,用定时器执行存储过程的方式在每月初统计上月的相关数据. 使用存储过程就要用到游标了,之前很少写存储过程,对游标也不是熟悉,咋办呢,现学现用啦. 创建存储过程 1 CREATE 2 [DEFINER = { user | CURRENT_USER }] 3 PROCEDURE sp_name ([proc_parameter[,...]]) 4 [characteristic

mysql中存储过程游标使用

mysql游标的使用能够循环获取结果级进行操作 定义游标 DECLARE id int; DECLARE name varchar(30); DECLARE cursor_name CURSOR FOR select c_id,c_name from tables (把select查询到的数据赋给游标cursor_name ) OPEN cursor_name (打开游标) FETCH cursor_name INTO id,name; (打开游标去取一条值如果该值存在,并把游标前进该行) CL

Oracle存储过程,游标使用

Oracle存储过程: 语法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] datatype2,...) IS [AS] PL/SQL BLOCK; mode用于指定输入输出参数:IN为输入参数,OUT为输出参数,当为输入参数时可以省去IN,OUT不能省去. 如果没有输入输出参数,可以省去 (arg1 [mode1] datatype1,arg2 [mode2] datatyp

Oracle数据库PL/SQL存储过程游标触发器

创建一个添加FOOD的存储过程 create or replace procedure add_food_pro (name in varchar,price in number,description in varchar) as  begin insert into food (f_name,f_price,description)values(name,price,description); commit; end; --下面的代码是调用存储过程 begin add_food_pro('糖

MySQL 存储过程/游标/触发器/事务

来源:http://www.cnblogs.com/zhuyp1015/p/3575823.html 将会用到的几个表 mysql> DESC products; +------------+--------------+------+-----+---------+----------------+| Field      | Type         | Null | Key | Default | Extra          |+------------+--------------+-

My sql之存储过程+游标

sql 实例如下: /**************定义更改car_station_user_acct_his new_balance old_balance存储过程**************/ create procedure abc (in number varchar(256))  -- [in表示这个参数是传入参数,out表示这个是传出参数(类似Java中的return),in out表示这个既是传入,又是传出参数,可以利用它传入该存储过程,然后接到处理后的这个参数] begin --

mysql之——存储过程 + 游标 + 事务

下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: DELIMITER $$ DROP PROCEDURE IF EXISTS `transferEmailTempData`$$ CREATE PROCEDURE transferEmailTempData(IN jobId VARCHAR(24)) BEGIN DECLARE idval VARCH

SQL存储过程+游标 循环批量()操作数据

本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor ; --读取第一行数据 WHILE @@FETCH_STATUS = 0 BEGIN --UPDATE dbo.MemberAccount SE