2011-12-27 74 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