我遇到了一个奇怪的问题,我正在编写一个触发器或存储过程(尝试过一个,然后尝试另一个,相同的问题)。
我有一个IF语句块,用于检查输入值是否为一组数字,然后相应地更新字段:
的Sanitized:
IF(INC_Center = "001" OR INC_Center = "1") THEN SET CenterAssigned = "Place1";
ELSEIF(INC_Center = "002" OR INC_Center = "2") THEN SET CenterAssigned = "Place2";
...
ELSEIF(INC_Center = "101") THEN SET CenterAssigned = "Place45";
ELSEIF(INC_Center = "101") THEN SET CenterAssigned = "Place46";
ELSEIF(INC_Center = "103") THEN SET CenterAssigned = "Place47";
ELSEIF(INC_Center = "104") THEN SET CenterAssigned = "Place48";
ELSEIF(INC_Center = "110") THEN SET CenterAssigned = "Place49";
ELSE SET CenterAssigned = "ERROR";
END IF;
这样做的缺点是必须进行49次检查。当我到达#45时,我从MySQL Workbench(Windows 8上的5.2.45 CE)获得了“解析器堆栈溢出”。我检查了一些其他帖子,看到有人建议检查thread_stack值,我的默认值是192k,所以我把它增加到256k,没有区别。
MySQL代码块上的IF语句数量是否有限制?语法看起来是正确的,当我注释掉过去#45的IF语句时,它们工作正常,包括Else语句。
我可以将它改为Case语句,它只是随着位置数量的增加而扩展的逻辑。但我很好奇这是不是我的问题。