2011-12-27 81 views
4

我嘗試做以下SELECT CASE和CALL程序

SELECT CASE @st 
    WHEN 'emp' THEN CALL empata(NEW.eqvis) 
    WHEN 'loc' THEN CALL pierde(NEW.eqvis) 
    WHEN 'vis' THEN CALL gana(NEW.eqvis) 
END 
INTO @dat; 

但我得到了這一點:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL empata(NEW.eqvis) 
        WHEN 'loc' THEN CALL pierde(NEW.eqvis) 
        WHEN' at line 18 

但如果我刪除了 「呼叫」 我得到了一個"Function db.xxx not found"

什麼即時做錯了?

+0

可能的重複http://stackoverflow.com/questions/7871260/mysql-calling-stored-procedures-inside-an-select-case-on-a-trigger – Nonym 2011-12-28 01:18:19

回答

1

你可以把你的程序empatapierde,並gana到功能,並使用如下面的第一個例子編碼:

-- works 
SET @st = 'loc'; 
SELECT CASE @st 
    WHEN 'loc' THEN function_(@st) 
END 
INTO @dat; 
SELECT @dat; 

我測試了以下場景,他們沒有工作:

-- won't work 
SET @st = 'loc'; 
IF @st = 'loc' THEN 
    function_(@st); 
END IF; 

-- won't work 
SET @st = 'loc'; 
SELECT CASE @st 
    WHEN 'loc' THEN CALL stored_procedure_(@st) 
END 
INTO @dat; 
SELECT @dat; 

-- won't work 
SET @st = 'loc'; 
IF @st = 'loc' THEN 
    CALL stored_procedure_(@st); 
END IF; 

至少,上述三個實例都沒有爲我工作。您可以嘗試它們,看看哪一個適用於您自己。

另外,您的問題在這裏是一樣的:MYSQL Calling stored procedures inside an SELECT CASE on a Trigger ..也張貼由你。我不確定版主會關閉或保留哪一個,所以我也在這裏發佈了這個答案。如果在另一個場合,你想跟進你提出的問題,但沒有收到你可以接受的答案,只要把它弄好,讓人們可以再次看到答案。

0

在這種情況下,您不能使用過程(使用CALL),它必須是function