我的问题是(是)以下。我试图使用if else语句没有结束,如果和MySQL总是给我语法错误。即使这个代码工作,我只是不喜欢你“必须”通知的概念如果要指定if-else语句已经结束,那么写入结束的系统。是否有其他方法可以完成相同的代码而不使用end if?我正在考虑编写两个单独的if子句而不是使用if-else但我仍然有一个语法错误。
编辑:我删除了代码,因为它使某些用户的问题更加复杂。基本问题是如果
更改if else end的格式答案 0 :(得分:1)
是的,有使用IF
声明的替代方法。
举个例子:
CREATE PROCEDURE check_budget_sp(IN in_department_name VARCHAR(20)
,IN in_salary DECIMAL(8,2),OUT res VARCHAR(1))
BEGIN
SET res = 'T';
SELECT CASE WHEN d.max_budget>(d.cur_budget + in_salary) THEN 'F' ELSE 'T' END
INTO res
FROM department d
WHERE d.dept_name = in_department_name
LIMIT 1;
END$$
如果SELECT没有返回一行,MySQL将发出警告信息。 (OP过程模式将表现出相同的行为。)如果我们想要避免警告,我们可以轻松地做到这一点,但它需要一些额外的代码。
要在OP过程中模拟 then 'F' else 'T'
逻辑,如果查询没有返回任何行,我们只需将返回值初始化为{{返回的值}。 1}},在我们运行查询之前。
此实施不需要任何额外的帮助"程序变量。额外的else
声明仅用于确保程序返回“T'或者是' F' (当查询没有返回一行时)。
还有其他几种选择。
对于MySQL SET
语句, IF
和 THEN
是强制性的。 END IF
是可选的。
这不是一个真正的问题。
如果您不喜欢ELSE
表达式中所需的END
,则可以使用MySQL特定功能替换CASE
表达式......
CASE
答案 1 :(得分:0)
此代码:
if max_helper>(cur_budget + check_budget_sp.salary) then
set res="F";
else
set res="T";
end if;
可以替换为:
set res = if(max_helper > cur_budget + check_budget_sp.salary, 'F', 'T');