2011-09-23 14 views
0

給下面的存儲過程:調用過程語法錯誤?

DELIMITER $$ 

DROP PROCEDURE IF EXISTS ric_forn$$ 
CREATE PROCEDURE ric_forn (IN nome_forn VARCHAR(100) , OUT msg VARCHAR(100)) 
BEGIN 
DECLARE num_rec INT; 

IF (nome_forn = '') THEN 
    SET msg = "Attenzione il nome inserito non è valido !"; 
END IF; 


SELECT COUNT(*) INTO num_rec FROM Fornitori WHERE Des_Fornitore = nome_forn; 

IF num_rec = 0 THEN 
    SET msg = "Nessun record trovato !"; 

ELSE 

SELECT Id_Fornitore, Des_Fornitore, Ind_Fornitore FROM Fornitori WHERE Des_Fornitore = nome_forn; 
    SET msg = "Records trovati:"; 

END IF; 

END$$ 

DELIMITER ; 

如何運行呢?

我想:

call ric_forn (Des_Fornitore,msg); 

call ric_forn (nome_forn ,msg); 

call ric_forn ('' ,msg); 

call ric_forn ('EAN srl' ,msg); 

「EAN srl'is值

但我總是得到這樣的未知列nome_forn或nknown列錯誤Des_Fornitore..etc

+1

你試過在變量周圍加引號嗎?比如'call ric_forn('test',msg);' – Snicksie

+0

我試過,但無濟於事。我打了個電話ric_forn('Nuova Elettrica,味精);但我得到錯誤1414 – Roberto

+0

如果我打電話ric_forn('Nuova Elettrica,@味精);它的工作完美,但我沒有得到任何消息... – Roberto

回答

1

嘗試在運行SP這種方式 -

SET @nome_forn = 'nome_forn'; --set your value 
SET @msg = 'msg'; --set your value 
CALL ric_forn(@nome_forn, @msg); 

SELECT @msg; -- output 
+0

它的工作原理...我把你以後建議:END IF; END $$ DELIMITER; 這是正確的嗎?謝謝..這是用參數調用sp的唯一方法嗎? – Roberto

+0

你可以從腳本的任何地方運行它。可以將字符串參數設置爲字符串文字,例如 - CALL ric_forn('your_value',@msg)。變量@msg用於輸出OUT參數的結果。 – Devart