4

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のバグですか?この機能を正しく削除するには?

4

1 に答える 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 ではありません。

avec バックティック、問題ありません 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);

Bug # 16303:

ここに画像の説明を入力

于 2016-08-17T01:33:07.883 に答える