创建函数在mysql中抛出错误,有人能帮我吗?

创建函数在mysql中抛出错误,有人能帮我吗?,mysql,function,Mysql,Function,我只是想创建一个函数,它意味着检查mysql数据库中是否存在表、函数或视图。但是我的数据库中有一些错误。有人能帮我吗 DELIMITER $$ DROP FUNCTION IF EXISTS check_if_exists$$ CREATE FUNCTION check_if_exists ( object_name VARCHAR(100), db_name VARCHAR(100), object_type ENUM('t', 'f', 'v', 'p')

我只是想创建一个函数,它意味着检查mysql数据库中是否存在表、函数或视图。但是我的数据库中有一些错误。有人能帮我吗

DELIMITER $$
DROP FUNCTION IF EXISTS check_if_exists$$
CREATE FUNCTION check_if_exists
  (
    object_name VARCHAR(100),
    db_name     VARCHAR(100),
    object_type ENUM('t', 'f', 'v', 'p')
)
RETURNS INT
BEGIN
IF (object_type='t') THEN
SELECT COUNT(1) INTO @f_result
from information_schema.TABLES as t1
where t1.TABLE_SCHEMA=db_name
      and t1.TABLE_NAME=object_name;
ELSE IF (object_type='f') THEN
select count(1) INTO @f_result
FROM information_schema.ROUTINES as info
WHERE info.ROUTINE_SCHEMA = db_name
      AND info.ROUTINE_TYPE = 'FUNCTION' AND info.ROUTINE_NAME = object_name;
ELSE IF (object_type='v') THEN
select count(1) into @f_result
from information_schema.VIEWS as t1
where t1.TABLE_SCHEMA=db_name and t1.TABLE_NAME=object_name;
ELSE IF (object_type='p') THEN
SELECT COUNT(1) INTO @f_result
FROM information_schema.ROUTINES as info
WHERE info.ROUTINE_SCHEMA = db_name
      AND info.ROUTINE_TYPE = 'PROCEDURE'
      AND info.ROUTINE_NAME = object_name;
END IF;
return (@f_result);
END$$
delimiter ;
另外,mysql的信息:

mysql  Ver 14.14 Distrib 5.5.37, for Linux (x86_64) using readline 5.1
错误消息是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 31

如您所见,错误消息没有帮助。此函数定义不依赖于任何用户数据库。因此,您可以在自己的DBMS中进行尝试。

您可以启动四个
IF
语句,但在末尾只有一个
END IF

''
附近关于语法错误的错误消息表明,它被解析到语句末尾,希望找到更多语法(如剩余嵌套的
IF
语句的平衡
end IF
),但没有找到它。语法错误试图通过显示错误后语句剩余部分中存在的文本来为您提供上下文,但如果它在发现错误之前到达末尾,则不会报告以下文本

您可以考虑使用替代:


请回复您的评论:


我试着用if…else if…else,就像其他语言一样。mysql中没有其他的if

不是你用的那种方式。标准SQL中不可能有数量不定的else if子句的“梯形图”

但是许多语言允许else块包含另一个if/then/else语句。因此,您可以生成复杂的分支代码。但是您必须正确终止每个if/then/else语句

IF ... THEN /* start 1st statement */
ELSE
    IF ... THEN /* start 2nd statement */
    ELSE
        IF ... THEN /* start 3rd statement */
        ELSE
        END IF /* end 3rd statement */
    END IF /* end 2nd statement */
END IF /* end 1st statement */
允许使用阶梯的语言:

  • Perl(
    elsif
  • Ruby(
    elsif
  • PHP(
    elseif
  • Python(
    elif
  • 基本(
    elseif
  • PL/SQL(
    elsif
  • PL/pgSQL(
    elsif
  • F#(
    elif
不允许阶梯但允许嵌套控制结构的语言:

  • C
  • C++
  • C#
  • 目标-C
  • 爪哇
  • Javascript
  • ANSI SQL,Transact-SQL
  • 帕斯卡,德尔菲
  • Awk
  • 斯卡拉
  • 哈斯克尔
  • R
  • 迅捷的
  • 飞镖

您有哪些错误?我有添加错误消息的疑问,但我认为这没有帮助。我正在尝试像其他语言一样使用if…else if…else。mysql中没有其他的if?
IF ... THEN /* start 1st statement */
ELSE
    IF ... THEN /* start 2nd statement */
    ELSE
        IF ... THEN /* start 3rd statement */
        ELSE
        END IF /* end 3rd statement */
    END IF /* end 2nd statement */
END IF /* end 1st statement */