2012-02-01 32 views
2

我的问题可能很愚蠢,但我有2天的MYSQL经验。我正在尝试使用MyTAP进行单元测试并遇到问题。MYSQL MyTAP问题

这里的exucted一个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

问题是您的tap.tstTableCountPROCEDURE而不是FUNCTION。所有的MyTAP测试都是功能,正如能够在SELECT声明中所述的那样。你不能调用从SELECT语句PROCEDURE,而是需要通过调用它:

CALL tap.tstTableCount(); 

不幸的是,你的榜样是一个不能简单地转换为FUNCTION由mytap功能一起使用。 FUNCTION中不允许动态SQL,但允许在PROCEDURE中使用。