2012-02-01 56 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中使用。