关于网友提出的“报游标已存在,游标不存在的问题”问题疑问,本网通过在网上对“报游标已存在,游标不存在的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:报游标已存在,游标不存在的问题
描述:
create procedure U9_BPCS_Insert
as
DECLARE @U_PONO FLOAT
DECLARE @U_TPROD CHAR(18)
DECLARE @U_QTY_IN FLOAT
DECLARE @U_APPLYDATE FLOAT
DECLARE @U_APPLYNO FLOAT
DECLARE @U_APPLYUSER CHAR(18)
DECLARE @U_DEPNAME CHAR(28)
DECLARE @B_TPROD CHAR(18)
DECLARE @B_QTY_BAL FLOAT
DECLARE BP_Cursor CURSOR --定义游标
FOR SELECT TPROD,
QTY_BAL
FROM dbo.M_BAL --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM BP_Cursor INTO @B_TPROD,
@B_QTY_BAL ; --读取第一行数据给到参数
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE U_Cursor CURSOR
FOR SELECT PONO,
TPROD,
QTY_IN,
APPLYDATE,
APPLYNO,
APPLYUSER,
DEPNAME
FROM dbo.Apply_info
WHERE TPROD =@B_TPROD
ORDER BY APPLYDATE DESC
OPEN U_Cursor;
FETCH NEXT FROM U_Cursor INTO @U_PONO,
@U_TPROD,
@U_QTY_IN,
@U_APPLYNO,
@U_APPLYUSER,
@U_DEPNAME,
@U_APPLYDATE
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@B_QTY_BAL<=@U_QTY_IN )
INSERT INTO dbo.UP_BPCS_MAPPING VALUES(@U_PONO,
@U_TPROD,
@B_QTY_BAL,
@U_APPLYNO,
@U_APPLYUSER,
@U_DEPNAME,
@U_APPLYDATE)
BREAK
IF (@B_QTY_BAL> @U_QTY_IN )
set @B_QTY_BAL= @B_QTY_BAL-@U_QTY_IN
INSERT INTO dbo.UP_BPCS_MAPPING VALUES(@U_PONO,
@U_TPROD,
@B_QTY_BAL,
@U_APPLYNO,
@U_APPLYUSER,
@U_DEPNAME,
@U_APPLYDATE)
CONTINUE
FETCH NEXT FROM U_Cursor INTO @U_PONO,
@U_TPROD,
@U_QTY_IN,
@U_APPLYNO,
@U_APPLYUSER,
@U_DEPNAME,
@U_APPLYDATE --读取下一行数据
END
-- DEALLOCATE U_Cursor
FETCH NEXT FROM BP_Cursor INTO @B_TPROD,
@B_QTY_BAL ;
END
CLOSE U_Cursor
CLOSE BP_Cursor; --关闭游标
--DEALLOCATE BP_Cursor; --释放游标
GO