2013-02-22 4 views
1

내 질문에 불구하고 소리가 들릴지 모르지만이 코드에 문제가 생길 수 있습니다. 나는 sqlyog에서 저장 프로 시저를 만들었고 지금은 그것을 호출하려고한다. 나는 거의 모든 것을 시도했지만 효과가 없습니다.mysql에서 while 루프를 사용하여 저장 프로 시저를 호출하는 방법

SET @x=1; 
WHILE @x<=10 DO 
CALL mypro(); 
SET @[email protected]+1; 
END WHILE; 

미리 감사드립니다.

+0

이 코드는 함수 또는 저장 프로 시저에 래핑됩니까? 'WHILE'은 그 맥락에서 실행되어야합니다. –

+0

아니요 그냥 쿼리가 작성된 쿼리 영역에 글을 쓰고 있습니다 – Shahzaib

+0

단순히 mypro() 호출을 작성하면 올바르게 작동합니다. – Shahzaib

답변

2

IF, WHILE과 같은 흐름 제어 명령문은 함수 또는 저장 프로 시저의 컨텍스트에서 실행해야합니다. 루프에서 mypro()을 실행하려면 해당 동작 자체를 프로 시저로 만들어야합니다. 아래에서는 WHILE 루프에서 원래 저장 프로 시저를 호출하는 call_mypro_x10()이라는 프로 시저를 만듭니다.

DELIMITER $$ 
CREATE PROCEDURE call_mypro_x10() 
BEGIN 
    SET @x = 1; 
    WHILE @x <= 10 DO 
    CALL mypro(); 
    SET @x := @x + 1; 
    END WHILE; 
END$$ 
DELIMITER ; 

그런 다음이 다른 하나 랩 프로 시저 호출 다음 DELIMITER 문은 모든 클라이언트에 필요하지 않을 수 있음을

CALL call_mypro_x10(); 

참고, 일부 MySQL의 클라이언트는 대체 구분을 지정하는 다른 방법을 제공 저장 프로 시저 및 함수 정의에 필요합니다. 명백하게 SQLyog supports DELIMITER

정상적인 쿼리 실행의 일부로 흐름 제어문을 허용하는 an open feature request이 있습니다.

+0

감사합니다. – Shahzaib

+0

고마워요.하지만 이미 충분히 쳤다는 평판을 얻지 못했습니다. – Shahzaib

+0

다시 한번 감사드립니다. – Shahzaib

관련 문제