2012-02-01 9 views
2

私の質問はばかげているかもしれませんが、私はMYSQLで2日間の経験があります。私はユニットテストのためにMyTAPを使用しようとしており、問題に直面しています。ここMYSQL MyTAP issue

は、mysqlのコンソール上exucted 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ステートメントで呼び出すことができます。残念ながら、あなたの例は、単にmytap機能が使用するFUNCTIONに変換することはできません一つです

CALL tap.tstTableCount(); 

:あなたは代わりを経由して、それを呼び出すために必要、SELECTの文からPROCEDUREを呼び出すことはできません。動的SQLはFUNCTIONでは許可されていませんが、PROCEDUREでは許可されています。