+ -
当前位置:首页 → 问答吧 → mysql存储过程if嵌套if的写法

mysql存储过程if嵌套if的写法

时间:2011-12-07

来源:互联网

比如我想用mysql存储过程实现下面程序语句的功能
程序代码:
if()
{
  if()
  {
  }else if()
  {
  }

}else if()
{
}

存储过程写法:
if ... then 
  if ... then
  else if ... then
  end if;
else if ... then
end if;



这样写报错,求指教正确的应该怎么写?

作者: jinanzc   发布时间: 2011-12-07

自己解决了 是 elseif 不是 else if

作者: jinanzc   发布时间: 2011-12-07

类似语法上的问题,其实可以参考一下手册中的说明和例子。

MySQL 5.4 Reference Manual12.8.6.1. IF Statement
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF

IF implements a basic conditional construct. If the search_condition evaluates to true, the corresponding SQL statement list is executed. If no search_condition matches, the statement list in the ELSE clause is executed. Each statement_list consists of one or more statements.

Note
There is also an IF() function, which differs from the IF statement described here. See Section 11.3, “Control Flow Functions”.

An IF ... END IF block, like all other flow-control blocks used within stored programs, must be terminated with a semicolon, as shown in this example:

DELIMITER //

CREATE FUNCTION SimpleCompare(n INT, m INT)
RETURNS VARCHAR(20)

BEGIN
DECLARE s VARCHAR(20);

IF n > m THEN SET s = '>';
ELSEIF n = m THEN SET s = '=';
ELSE SET s = '<';
END IF;

SET s = CONCAT(n, ' ', s, ' ', m);

RETURN s;
END //

DELIMITER ;


As with other flow-control constructs, IF ... END IF blocks may be nested within other flow-control constructs, including other IF statements. Each IF must be terminated by its own END IF followed by a semicolon. You can use indentation to make nested flow-control blocks more easily readable by humans (although this is not required by MySQL), as shown here:

DELIMITER //

CREATE FUNCTION VerboseCompare (n INT, m INT)
RETURNS VARCHAR(50)

BEGIN
DECLARE s VARCHAR(50);

IF n = m THEN SET s = 'equals';
ELSE
IF n > m THEN SET s = 'greater';
ELSE SET s = 'less';
END IF;

SET s = CONCAT('is ', s, ' than');
END IF;

SET s = CONCAT(n, ' ', s, ' ', m, '.');

RETURN s;
END //

DELIMITER ;

作者: ACMAIN_CHM   发布时间: 2011-12-07

引用 1 楼 jinanzc 的回复:

自己解决了 是 elseif 不是 else if

作者: rucypli   发布时间: 2011-12-07