2012-03-04 62 views
-1
declare prioritaC INT default 1; 
select 
    case 
    when (b.zraneni = 0 and a.center_id is not null) then (
     a.center_id 
    ) else (
     select hokejista_id 
     from nahradnik 
     where nahradnikTyp_id = 3 and tym_id = 1 and priorita = prioritaC 
     set prioritaC = prioritaC + 1; 
    ) 
    end as center_id_real 
    from oslabeni45 a 
    left join hokejista b on (a.center_id = b.id) 

为什么不可能在set prioritaC = prioritaC + 1的情况下声明?如何可以选择可变增量?带有select内部更新变量的MySql过程

+0

您需要在更新语句中增加行值! – 2012-03-04 15:33:07

+0

如何声明变量在更新语句中递增? – 2012-03-04 16:11:56

回答

0

其他评论者正在做的一点是,在MySQL中有单独的CASE结构。一个是您在过程代码中使用的case语句,另一个是您在SELECT语句或子句中使用的功能性结构。

在这个例子中你有一个包含CASE结构的SELECT语句。结果compronent必须是表达式。你不能在这里陈述。

您需要在SELECT之外移动任何语句。

+0

谢谢,我明白了。但是我需要一个变量来选择case,有没有可能如何解决它? – 2012-03-04 16:27:26

+0

在一个过程中,您可以SELECT ... ** INTO ** ...然后您可以按照IF THEN ELSE END IF逻辑或CASE ... END CASE语句并在此处包含任何分配。如果你希望这个变量在过程调用中持续存在,那么它必须存储在一个表中。 – TerryE 2012-03-04 16:35:37

+0

我只需要select语句中的变量preceitaC,并且只有当语句中的行是(b.zraneni> 0或a.center_id为null)时,我才需要增加它。您需要使用此变量来选择语句,如代码中所示。 – 2012-03-04 16:45:55