创建函数在mysql中引发错误,有人可以帮我吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了创建函数在mysql中引发错误,有人可以帮我吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3508字,纯文字阅读大概需要6分钟。
内容图文
![创建函数在mysql中引发错误,有人可以帮我吗?](/upload/InfoBanner/zyjiaocheng/887/e3cb90fbf77d4e1ebc08c2aa825dca44.jpg)
我只是试图创建一个函数,该函数意味着检查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),但未找到.语法错误试图通过向您显示错误后语句其余部分中存在的文本来提供上下文,但是如果在发现错误之前到达末尾,则没有后续文本要报告.
您可以考虑改用CASE statement:
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
READS SQL DATA
BEGIN
DECLARE f_result INT DEFAULT 0;
CASE object_type
WHEN '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;
WHEN '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;
WHEN '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;
WHEN '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 CASE;
RETURN (f_result);
END$$
DELIMITER ;
发表您的评论:
I am trying to use if…else if…else like any other language. There is no else if in mysql?
不像您以前那样使用.在标准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#(省略号)
不允许使用梯子但允许嵌套控制结构的语言:
> C
> C
> C#
>目标-C
> Java
> Javascript
> ANSI SQL,Transact-SQL
>德尔福帕斯卡
> Awk
>斯卡拉
>哈斯克尔
> R
>斯威夫特
>飞镖
>去
内容总结
以上是互联网集市为您收集整理的创建函数在mysql中引发错误,有人可以帮我吗?全部内容,希望文章能够帮你解决创建函数在mysql中引发错误,有人可以帮我吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。