我的问题可能很愚蠢,但我有2天的MYSQL经验。我正在尝试使用MyTAP进行单元测试并遇到问题。
这是在mysql控制台上传播的SQL代码:
drop procedure IF EXISTS tap.tstTableCount;
delimiter //
CREATE PROCEDURE tap.tstTableCount (IN db CHAR(64), IN tbl CHAR(64))
BEGIN
DECLARE l_sql VARCHAR (4000);
SET l_sql=CONCAT('SELECT COUNT(*)>0 FROM ',db,'.',tbl,';');
SET @sql=l_sql;
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END //
delimiter ;
call tap.tstTableCount('storibo','relationCategory'); /* This call works fine and returns 1 (true)*/
SELECT tap.ok(
tap.tstTableCount('storibo','relationCategory'),
'relationCategory contains data'
); /* this one returns :
ERROR 1305 (42000): FUNCTION tap.tstTableCount does not exist */
是MyTAP fmk的问题还是我的语法出错了?
答案 0 :(得分:1)
问题是您的tap.tstTableCount
是PROCEDURE
而不是FUNCTION
。所有MyTAP测试都是FUNCTIONS,如能够在SELECT
语句中调用它。您无法从PROCEDURE
语句中调用SELECT
,而是需要通过以下方式调用:
CALL tap.tstTableCount();
不幸的是,您的示例是一个不能简单地转换为mytap函数使用的FUNCTION
的示例。 FUNCTION
中不允许使用动态SQL,但PROCEDURE
中允许使用动态SQL。