是否有替代if-else语法而不需要endif

时间:2016-03-24 22:43:21

标签: mysql if-statement

我的问题是(是)以下。我试图使用if else语句没有结束,如果和MySQL总是给我语法错误。即使这个代码工作,我只是不喜欢你“必须”通知的概念如果要指定if-else语句已经结束,那么写入结束的系统。是否有其他方法可以完成相同的代码而不使用end if?我正在考虑编写两个单独的if子句而不是使用if-else但我仍然有一个语法错误。

编辑:我删除了代码,因为它使某些用户的问题更加复杂。基本问题是如果

更改if else end的格式

2 个答案:

答案 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');