MYSQL MyTAP问题

时间:2012-02-01 15:29:01

标签: mysql unit-testing

我的问题可能很愚蠢,但我有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的问题还是我的语法出错了?

1 个答案:

答案 0 :(得分:1)

问题是您的tap.tstTableCountPROCEDURE而不是FUNCTION。所有MyTAP测试都是FUNCTIONS,如能够在SELECT语句中调用它。您无法从PROCEDURE语句中调用SELECT,而是需要通过以下方式调用:

CALL tap.tstTableCount();

不幸的是,您的示例是一个不能简单地转换为mytap函数使用的FUNCTION的示例。 FUNCTION中不允许使用动态SQL,但PROCEDURE中允许使用动态SQL。