2012-03-04 1 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을 사용할 수없는 이유는 무엇입니까? 선택에서 변수 증분은 어떻게 될 수 있습니까?내부에서 업데이트 변수가있는 MySql 프로 시저

+0

업데이트 문에서 행 값을 증가시켜야합니다! –

+0

업데이트 문에서 변수를 어떻게 증가시킬 수 있습니까? –

답변

0

다른 주석 작성자가 간략하게 설명하는 요점은 TWO 별도의 사례가 MySQL에 포함되어 있다는 것입니다. 하나는 절차 코드에서 사용하는 case 문이고 다른 하나는 SELECT 문이나 절에서 사용하는 기능적 구성입니다.

이 예제에서는 CASE 구문을 포함하는 SELECT 문이 있습니다. 결과는 표현식이어야합니다. 여기에 문장을 넣을 수는 없습니다.

SELECT 외부 문을 이동해야합니다.

+0

감사합니다. 이해합니다. 하지만 선택 변수에 변수가 필요합니다. 문제를 해결할 수있는 가능성이 있습니까? –

+0

프로 시저에서 SELECT ... ** INTO ** ... 그런 다음 IF THEN ELSE END IF 논리 또는 CASE ... END CASE 문을 따라 여기에 모든 할당을 포함 할 수 있습니다. 이 변수를 프로 시저 호출간에 유지하려면 테이블에 저장해야합니다. – TerryE

+0

select 문에서만 변수 prioritaC가 필요하며 명령문의 행이 (b.zraneni> 0 또는 a.center_id가 null 인 경우) 증분이 필요합니다. 코드에서 볼 수있는 것처럼이 변수를 선택 문이 필요합니다. –