2010-09-29 2 views
0

Когда я пытаюсь вызвать определенные пользователем функции с помощью удаленного подключения, это дает мне ошибку.Вызов функций MySql удаленно завершается

Дело в том, что запрос без каких-либо функций отлично работает для удаленного подключения.

Так как я могу вызвать функции удаленно.

Запрос: 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';

Функция:

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; 

На удаленном соединении ничего не получать просто вешает трубку.

+3

Это очень трудно помочь, если вы не говорите нам, что ошибки вы получаете и дать нам более подробную информацию о том, что вы делаете. –

+0

Таким образом, либо ваша функция глючит, либо вы пытаетесь вызвать хранимую процедуру, а не функцию с помощью select. Покажите код, покажите точную ошибку. – nos

+1

Использует ли пользователь, с которым вы подключаетесь, с привилегией 'EXECUTE'? – Hammerite

ответ

0

попробовать

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 ; 
Смежные вопросы