2010-08-04 209 views
5

我是新來使用程序,似乎無法得到我的工作。我正在使用MySQL v5.1.36並在WAMPP服務器上使用MySQL控制檯輸入我的代碼。如果我去(重新)創建程序。我收到錯誤#1304(42000)。錯誤與mysql程序錯誤1304&錯誤1305

mysql> DELIMITER // 
mysql> 
mysql> CREATE PROCEDURE modx.getCRID (IN x VARCHAR(255),OUT y INT) 
    -> BEGIN 
    ->   DECLARE y INT; 
    ->   SELECT id INTO y 
    ->   FROM `modx`.coverage_region 
    ->   WHERE `coverage_region`.name = x; 
    -> END// 
ERROR 1304 (42000): PROCEDURE getCRID already exists 
mysql> 
mysql> DELIMITER ; 

但是,如果我嘗試使用該過程,我會收到錯誤#1305(42000)。

mysql> USE modx; 
Database changed 
mysql> SET @crID = modx.getCRID("South East"); 
ERROR 1305 (42000): FUNCTION modx.getCRID does not exist 

如果該程序存在一個,它如何不能存在?我究竟做錯了什麼。

回答

3

我相信問題是

  1. ,因爲你正試圖重新創建一個現有的過程出現的第一個錯誤。如果您先丟棄該過程,則不會出現此錯誤
  2. 第二個錯誤是因爲使用CALL語句調用PROCEDURE,而函數作爲函數引用進行調用,就像在代碼中一樣。您必須定義一個功能,而不是一個過程。該(MySQL documentation)說:

CREATE FUNCTION語句也是在MySQL用於支持UDF的 (用戶定義函數) 。參見 21.2,「向MySQL添加新功能」。一個UDF可以被認爲是一個外部存儲的函數。存儲函數 與UDF共享其命名空間。有關規則 的第8.2.3節「功能名稱解析 和解決方案」,請參閱 ,其中描述了服務器如何解釋 對不同種類 功能的引用。

要調用存儲過程,請使用 CALL語句(請參見部分12.2.1, 「CALL語法」)。要調用存儲的 函數,請參閱 表達式。該函數在表達式評估期間返回 值。

+0

謝謝!它非常明顯,但我無法擺脫它,因爲我確信我像SQL Server一樣成爲SP。 :-) – CobaltBlue 2012-04-18 00:45:38