存储过程 游标

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,RuleNumber,BranchCode,number,JLWZCode FROM IM_ReRun where Flag=0
open cur
fetch cur into @executedate,@rulenumber,@branchcode,@number,@JLWZCode
while (@@Fetch_Status=0)
begin    exec RuleExecute @rulenumber,@executedate,‘1‘,@branchcode
         declare cur1 INSENSITIVE SCROLL cursor for select result,occurdate from  dbo.IM_Result where number=@number and BranchCode=@branchcode and seriesID=0 and executedate=@executedate  and rulenumber=@rulenumber
        declare @result varchar(20)
        declare @occurdate varchar(20)
         open cur1
         fetch first from cur1 into @result,@occurdate
    if(@result=‘正常‘)
    begin
      declare cur2 INSENSITIVE SCROLL cursor for select ZBcode,ZDcode,chancode,Type,TableSource from dbo.IM_DataSource where number=@number
      declare @ZBcode varchar(20)
      declare @ZDcode varchar(20)
      declare @chanCode varchar(20)
      declare @type varchar(20)
      declare @TableSource varchar(100)
      open cur2
      fetch first from cur2 into @ZBcode,@ZDcode,@chanCode,@type,@TableSource
      declare @datet varchar(20) set @datet=‘DateYMD‘
      if(@type=‘M‘)
      begin
       set @datet=‘DateYM‘
       set @occurdate=substring(@occurdate,0,7)
      end
       declare @sql varchar(1000)
       set @sql=‘update ‘+@TableSource+‘ set flag=0 where zbcode=‘+@ZBcode+‘ and ‘+@datet+‘=‘+@occurdate+‘ and BranchCode=‘+@JLWZCode+‘‘
       exec(@sql)
      close cur2
      Deallocate cur2
    end
    close cur1
    Deallocate cur1
    update IM_ReRun set Flag=1 where RuleNumber=@rulenumber and BranchCode=@branchcode and ExcuteDate=@executedate
    fetch next from cur into @executedate,@rulenumber,@branchcode,@number,@JLWZCode
end
close cur
Deallocate cur
GO

该存储过程游标内又定义了两个游标cur1和cur2。

并且这两个游标只取select结果的第一行数据。

所以在定义时需要加上“INSENSITIVE SCROLL” scroll表示可随意移动游标指 针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/  ,不然会报错,错误会提示fetch: 提取类型first不能与只进游标一起使用。

时间: 2024-08-07 04:33:25

存储过程 游标的相关文章

存储过程 游标 事例

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