我可以在if语句中声明游标吗?
如果可能的话我怎么能做到?
因为我只是像这样制作光标
CREATE FUNCTION `fn_test`(
ProductID BIGINT(20)
)
RETURNS DECIMAL(10,2)
BEGIN
DECLARE PrductDiscValue DECIMAL(10, 2);
DECLARE DiscType INT(1);
DECLARE DiscValue DESIMAL(10,2);
IF ProductID != 0 THEN
SET PrductDiscValue = (SELECT Discountvalue, DiscountType FROM discount WHERE FIND_IN_SET(ProductID,DiscIDs);
END IF;
RETURN ProductDiscountValue(1);
但这不起作用。所以,我做了以下
IF ProductID != 0 THEN
DECLARE PrductDiscValue CURSOR FOR SELECT Discountvalue, DiscountType FROM discount WHERE FIND_IN_SET(ProductID,DiscIDs;
END IF;
OPEN ProductDiscountValue;
FETCH ProductDiscountValue INTO DiscValue, DiscType;
RETURN DiscValue;
END
这给了我错误::
我需要DiscValue和DiscType进行不同的计算。
任何帮助都将不胜感激
提前致谢。
答案 0 :(得分:2)
即使我从未在MySQL中使用过CURSOR,但我发现它是在 MySQL manual
中明确提到的游标声明必须出现在处理程序声明之前和之后 变量和条件声明。
如果你想在某些条件下使用那个光标,那么你必须在 IF 条件中使用 FETCH CURSOR 语法
下面是一些很好的教程,它将详细描述光标:
答案 1 :(得分:0)
请使用它:
开始
IF test = true THEN
BEGIN
DECLARE ats_cursor CURSOR FOR SELECT distinct ats_id FROM ats_eb ats where ats.year = year and ats.edition_shortname = edition;
END;
ELSE
BEGIN
DECLARE ats_cursor CURSOR FOR SELECT distinct ats_id FROM ats_eb ats where ats.year = year and ats.edition_shortname = edition;
END;
END IF;
结束