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

jinanzc 2011-12-07 04:55:20
比如我想用mysql存储过程实现下面程序语句的功能
程序代码:
if()
{
if()
{
}else if()
{
}

}else if()
{
}

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



这样写报错,求指教正确的应该怎么写?
...全文
5468 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jinanzc 的回复:]

自己解决了 是 elseif 不是 else if
[/Quote]对
ACMAIN_CHM 2011-12-07
  • 打赏
  • 举报
回复
类似语法上的问题,其实可以参考一下手册中的说明和例子。

[Quote=MySQL 5.4 Reference Manual]12.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 ;

[/Quote]
jinanzc 2011-12-07
  • 打赏
  • 举报
回复
自己解决了 是 elseif 不是 else if

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧