2010-09-29 5 views
0

Lorsque j'essaie d'appeler des fonctions définies par l'utilisateur à l'aide de la connexion à distance, cela me donne une erreur.L'appel à distance des fonctions MySql échoue

La chose est requête sans toutes les fonctions fonctionne bien pour la connexion à distance.

Comment puis-je appeler des fonctions à distance.

Requête: select jobcardid,sonno,sonnumber,getSalesOrderCountByStatus('completed',1)as finished,getSalesOrderCountByStatus('pending',sonnumber)as inprocess,getSalesOrderCountByStatus('',1)as total from tblm_jobcard where sonnumber like 'A121';

Fonction:

CREATE [email protected] FUNCTION getSalesOrderCountByStatus(v_status varchar(12), v_salesorderid integer) RETURNS int(11) 
    READS SQL DATA 
BEGIN 
DECLARE cnt integer(10); 
if(length(v_status)>0) then 
select count(1) into cnt from tblm_jobcard where sonno = v_salesorderid and status = v_status; 
else 
select count(1) into cnt from tblm_jobcard where sonno = v_salesorderid ; 
end if; 
RETURN cnt; 

Lors de la connexion à distance rien ne se passe jusqu'à se planter.

+3

Il est très difficile d'aider à moins que vous nous dire quelle est l'erreur que vous obtenez et nous donner plus de détails sur ce que vous faisiez. –

+0

Donc soit votre fonction est boguée, soit vous essayez d'appeler une procédure stockée et non une fonction en utilisant select. Montrez du code, montrez l'erreur exacte que vous obtenez. – nos

+1

L'utilisateur que vous connectez dispose-t-il du privilège 'EXECUTE'? – Hammerite

Répondre

0

essayer

DELIMITER $$ 

CREATE FUNCTION getSalesOrderCountByStatus(v_status VARCHAR(12), v_salesorderid INTEGER) RETURNS INT(11) 
BEGIN 
DECLARE cnt INTEGER(10); 
IF(LENGTH(v_status)>0) THEN 
SELECT COUNT(1) INTO cnt FROM tblm_jobcard WHERE sonno = v_salesorderid AND STATUS = v_status; 
ELSE 
SELECT COUNT(1) INTO cnt FROM tblm_jobcard WHERE sonno = v_salesorderid ; 
END IF; 
RETURN cnt; 
END$$ 
DELIMITER ; 
Questions connexes