我这个函数的游标到底错在哪里?

zc_0101 zc_0101 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
执行的时候是死循环


CREATE FUNCTION fn_Return_Should_Pay_list(@now datetime)

RETURNS @Should_Pay_list TABLE(
Cr_ID int IDENTITY PRIMARY KEY, --主键
Cr_PL_ID int NOT NULL, --外键
Cr_Charge_date_should smalldatetime NOT NULL, --应付日期
CR_left_time varchar(20) NOT NULL, --倒计时
Cr_fee_should money NOT NULL --应付金额
)
AS

BEGIN
DECLARE @Pl_ID INT,@PL_CL_ID INT,@PL_FTL_ID INT,@PL_avr_fee MONEY,@PL_inure_date DATETIME,@PL_end_date DATETIME
--声明游标
declare Pact_list_Cursor CURSOR FOR SELECT Pl_ID,PL_CL_ID,PL_FTL_ID,PL_avr_fee,PL_inure_date,PL_end_date from T_pact_list where PL_active=1
--打开游标
Open Pact_list_Cursor
FETCH NEXT FROM Pact_list_Cursor INTO @Pl_ID,@PL_CL_ID,@PL_FTL_ID,@PL_avr_fee,@PL_inure_date,@PL_end_date

WHILE(@@fetch_status=0)
BEGIN
--获取提醒天数
declare @Forward_Pay_Day int
select @Forward_Pay_Day=CTL_Forward_Pay_Day from T_Client_Type_List where CTL_ID =(select CL_CLT_ID from T_Client_List where CL_ID=
(select PL_CL_ID from T_pact_list where PL_ID=@PL_ID))

--获取付款类型
declare @Pay_type_str varchar(10),@Pay_type int
select @Pay_type_str=FTL_name from T_Fee_type_list where FTL_ID=@PL_FTL_ID
If @Pay_type_str='月付' Set @Pay_type=1
If @Pay_type_str='季付' Set @Pay_type=3
If @Pay_type_str='半年付' Set @Pay_type=6
If @Pay_type_str='年付(送产权)' Set @Pay_type=12
If @Pay_type_str='年付' Set @Pay_type=12
If @Pay_type_str='一次性支付' Set @Pay_type=13

--获取周期付款金额
declare @avr_fee money
select @avr_fee=@PL_avr_fee


--获取该合同生效日期
declare @inure_date datetime,@should_pay_date datetime
Select @inure_date=@PL_inure_date


--获取合同终止日期
declare @end_date datetime
Select @end_date=@PL_end_date

--向表中插入数据
If @Pay_type<>13 --非一次性支付
BEGIN
If @inure_date<=dateadd(day,@Forward_Pay_Day,@now) --如果生效日期小于等于当前日期+提醒天数
BEGIN
Set @should_pay_date=@inure_date --第一次应付日期为合同生效日期
WHILE @should_pay_date<=dateadd(day,@Forward_Pay_Day,@now) and @should_pay_date<=@end_date --如果生效日期小于等于当前日期+提醒天数并且小于等于终止日期
BEGIN
IF not exists(SELECT * FROM T_Charge_Record where Cr_PL_ID=@PL_ID and Cr_Charge_date_should=@should_pay_date)
BEGIN
INSERT INTO @Should_Pay_list SELECT @PL_ID,@should_pay_date,dbo.fn_TwoDateDiff(@should_pay_date,@now),@avr_fee
END
Set @should_pay_date=dateadd(month,@Pay_type,@should_pay_date)
END
END
END
ELSE --一次性支付
Begin
IF not exists(SELECT * FROM T_Charge_Record where Cr_PL_ID=@PL_ID and Cr_Charge_date_should=@inure_date)
BEGIN
INSERT INTO @Should_Pay_list SELECT @PL_ID,@inure_date,dbo.fn_TwoDateDiff(@inure_date,@now),@avr_fee
END
End
END

--关闭游标
CLOSE Pact_list_Cursor
DEALLOCATE Pact_list_Cursor
RETURN
END
...全文

相关推荐

PHP操作文件方法问答

PHP操作文件方法问答

执念高

MySQL系列—-创建存储函数、游标的使用

MySQL系列—-创建存储函数、游标的使用创建存储函数输入任意三个数,结果输出它们的最小值调用函数使用游标使用游标从表中查询信息从sc表中查询成绩高于80分的学生信息有帮助的别忘了点个赞再走哦!! 本期是MySQL系列哦~~ 主要用两个例子跟大家分别展示创建存储函数以及游标的使用 创建存储函数 存储函数不同于存储过程,它有返回值,需要有RETURN语句 输入任意三个数,结果输出它们的最小值 DELIMITER $$ ## 创建存储函数smin CREATE FUNCTION `sj`.`smin`(i INT,j INT,k INT) RETURNS INT BEGIN DECLARE

weixin_38653085

Oracle存储过程、游标、函数的详解

Oracle存储过程、游标、函数的详解

Tlimited

SQLServer数据库游标和函数的使用(经典)

此资料可以帮助没有用过数据库游标和函数的朋友学会去用它,只要跟着做一遍就会使用啦,这样就在设计数据库时可以充分灵活运用游标和函数

漫画之迷

Oracle中的游标和函数详解

Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。 操作步骤:    声明游标    打开游标    取出结果,此时的结果取出的是一行数据    关闭游标 到底那种类型可以把一行的数据都装进来    此时使用 ROWTYPE 类型,此类型表示可以把一行的数据都装进来。 例如:查询雇员编号为 7369 的信息(肯定是一行信息)。 例:查询雇员编号为 7369 的信息(肯定是一行信息)。 DECLARE eno emp.empno

weixin_38695751
评论 12
收藏 已收藏
分享
返回顶部
zc_0101
应用实例 27,579 成员 68,540 内容