2009-10-15 3 views
0

MySQL 매뉴얼 says CASE 문 (WHEN 부분)에는 statement_list가 포함될 수 있습니다.MySQL에서는 얼마나 많은 명령문을 조건부로 만들 수 있습니까?

정확한 내용은 어느 정도입니까? 나는 매개 변수화하고 싶은 꽤 큰 쿼리를 수행해야한다. 그러나 이것은 또한 조인중인 테이블을 변경해야한다는 것을 의미합니다.

UPDATE에게 ... I를이는 CASE 문을 사용하여 수행 할 수 없음을 나는 읽었습니다, 그래서 존재하는 모든 매개 변수 값을 저장 프로 시저를 다시 만들 필요가 없습니다 수있는 솔루션을 찾고 있어요 CURSOR를 사용하여 문제를 해결하려고했습니다. 나는 모든 객체에 대해 CURSOR를 정의했다. IF-ELSE 문을 사용하여 어떤 커서를 열고 루프하고 닫을 지 선택하고 싶습니다. 그러나 나는 ...

모든 커서와 변수 (USB, OBJ, mm, 스탬프) 다른 이름으로 선언되어 있지만, 내가 읽어을 단축했습니다 .... 구문 권리를 얻을 수

if OBJECTTYPE = 1 then 
open CUR_1_BUILDING; 
LOOP1: loop 
    fetch CUR_1_BUILDING into usb, obj, mm, stamp; 
    if no_more_rows then 
     close CUR_1_BUILDING; 
     leave loop1; 
    end if; 
    INSERT INTO ObjectCache (usb, obj, mm, date_checked) VALUES (usb, obj, mm, now()); 
end loop LOOP1; 
    CLOSE CUR_1_BUILDING; 
else if OBJECTTYPE = 2 then 
open CUR_2_CITY; 
LOOP2: loop 
    fetch CUR_2_CITY into usb, obj, mm, stamp; 
    if no_more_rows then 
     close CUR_2_CITY; 
     leave loop2; 
    end if; 
    INSERT INTO ObjectCache (usb, obj, mm, date_checked) VALUES (usb, obj, mm, now()); 
end loop LOOP2; 
    close CUR_2_CITY; 
end if; 

CASE 문을 사용할 수있는 방법이 있습니까?

BEGIN 
    CASE 
     when OBJECTTYPE = 1 
      INSERT INTO ObjectCache SELECT id FROM Building 
     when OBJECTTYPE = 2 
      INSERT INTO ObjectCache SELECT id FROM City 
    END CASE; 
END 
+0

ELSE IF ELSEIF가 있어야합니다. 부울 오타가 있었음 – Ropstah

답변

1

IF ELSE을 사용하거나 동적 SQL을 빌드하고 실행할 수 있습니다.

+0

하지만 OBJECTTYPES가 2 개 이상 있습니다.이 경우 ELSE를 사용할 수 없습니까? – Ropstah

+0

당신은 여러개의 IF ELSE IF ELSE IF ELSE IF ELSE IF 등등을 연결할 수 있습니다 ... –

+0

시도해 봤지만 복잡한 쿼리에서는 작동하지 않습니다 ... 96 행에 구문 오류가 있습니다. (비어 있음) 스크립트는 95까지 실행됩니다. 조금 더 시험해 보겠다. 그렇지 않으면 다른 샘플을 게시 할 것이다 – Ropstah

관련 문제