MySQL:创建一个函数,但它已经存在。

5

MySQL服务器版本:5.1.73 源码分发版。

我无法创建一个函数,即使在删除它之后仍然存在。

首先删除该函数:

mysql> drop function if exists `xapps_f20160817`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+-----------------------------------------+
| Level | Code | Message                                 |
+-------+------+-----------------------------------------+
| Note  | 1305 | FUNCTION xapps_f20160817 does not exist |
+-------+------+-----------------------------------------+
1 row in set (0.00 sec)

但是当我再次创建它时,它仍然存在。

mysql> create function `xapps_f20160817`(
    -> `_time` varchar(30),
    -> `_rpid` varchar(10),
    -> `_mvsz` varchar(10),
    -> `_rvsz` varchar(10),
    -> `_ncpu` varchar(10),
    -> `_rcpu` varchar(10),
    -> `_appn` varchar(64)
    -> )  RETURNS BIGINT READS SQL DATA
    -> BEGIN
    -> insert into `20160817`(time, rpid, mvsz, rvsz, ncpu, rcpu, appn)
    -> values(_time, _rpid, _mvsz, _rvsz, _ncpu, _rcpu, _appn);
    -> RETURN LAST_INSERT_ID();
    -> END
ERROR 1304 (42000): FUNCTION xapps_f20160817 already exists
尝试使用:
mysql> select xapps_f20160817('100','100','100','100','100','100','100');$$
ERROR 1305 (42000): FUNCTION xapps_db.xapps_f20160817 does not exist

尝试从函数列表中查找:

mysql> show function status where name='xapps_f20160817';$$
Empty set (0.00 sec)

尝试删除它,但它并不存在:

mysql> drop function if exists `xapps_f20160817`;$$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;$$
+-------+------+-----------------------------------------+
| Level | Code | Message                                 |
+-------+------+-----------------------------------------+
| Note  | 1305 | FUNCTION xapps_f20160817 does not exist |
+-------+------+-----------------------------------------+
1 row in set (0.01 sec)

这是MySQL的一个bug吗?如何正确地移除这个功能?


尝试创建具有数据库名称和函数名称的函数。 - Rakesh Kumar
1个回答

4

确保您已经选择了一个数据库,使用命令use mydbname;

DROP FUNCTION IF EXISTS myfunc789a;
DELIMITER $$
create function myfunc789a
(   theI INT
)
RETURNS INT
BEGIN
    RETURN theI*7;
END$$
DELIMITER ;

select myfunc789a(8);

DELIMITER只在某些客户端工具中使用,不包括phpmyadmin。

使用反引号,5.6和5.7都没有问题:

DROP FUNCTION IF EXISTS `myfunc789a`;
DELIMITER $$
create function `myfunc789a`
(   theI INT
)
RETURNS INT
BEGIN
    RETURN theI*7;
END$$
DELIMITER ;

select `myfunc789a`(8);

错误 #16303:

在此输入图像描述


该错误与IT技术有关。

那么将函数名放在反引号中是没有问题的,对吗? - Tim Biegeleisen
我点赞了你。虽然周末我不会太频繁地使用它,但我会尝试回答几个问题。是的,我没有生活。 - Tim Biegeleisen
然后还有这个来自那个时代的问题 https://bugs.mysql.com/bug.php?id=17012 - Drew
@Drew 感谢你提供的错误链接,为解决它提供了线索。 - J.H
抱歉你要忍受这一切。希望不久的将来能够升级。我无法忍受使用5.6版本,甚至无法享受新的JSON功能。 - Drew
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接