2013-05-10 144 views
0

我試圖在update語句的參數中進行條件更改。 我收到以下錯誤,當我嘗試以下功能Mysql錯誤:不允許從函數返回結果集

/home/y/bin/mysql -u root <testpri.sql> out 
ERROR 1415 (0A000) at line 4: Not allowed to return a result set from a function 

testpri.sql的內容如下:

use `zestdb`; 
DROP FUNCTION IF EXISTS UPDATEPASSWD; 
DELIMITER // 
CREATE FUNCTION UPDATEPASSWD(n INT) RETURNS varchar(255) DETERMINISTIC 
BEGIN 
    DECLARE mypasswd varchar(255); 
    IF (n = 1) THEN 
     SET mypasswd = '12ccc1e5c3c9203af7752f937fca4ea6263f07a5'; 
     SELECT 'n is 1' AS ' '; 
    ELSE 
     SET mypasswd = '1a7bc371cc108075cf8115918547c3019bf97e5d'; 
     SELECT 'n is 0' AS ' '; 
    END IF;> 
    SELECT CONCAT('mypasswd is ', mypasswd) AS ' '; 
    RETURN mypasswd; 
END // 
DELIMITER ; 
CALL UPDATEPASSWD(0); 

我缺少什麼?

回答

2

我認爲這實際上是你調試SELECT調用。

docs

Statements that return a result set can be used within a stored procedure but not within a stored function. This prohibition includes SELECT statements that do not have an INTO var_list clause...

0

我剛到尋求答案對同一問題的,發現另一種方式來解決這個問題,讓我可以使用SELECT語句中的心臟和靈魂引發警告的MySQL函數。

請考慮以下代碼片段。

SET intNMatches =(SELECT COUNT(*)...

SET脅迫SELECT語句返回其唯一列,行數,成intNMatches,局部變量強制轉換爲BIGINT。因爲它包含商業祕密,我不能顯示查詢的其餘部分,只要說這個查詢安裝時不會導致MySQL引擎發出警告。