2013-03-27 3 views
0

임시 테이블을 생성하고 임시 테이블에서 행을 가져 와서 쿼리를 실행하는 프로 시저를 작성했습니다. 임시 테이블에 약 13486 개의 행이 있습니다. 그러나 프로 시저를 호출 할 때 나는 프로 시저가 임시 테이블에서 107 행을 가져온 후 종료되는 것을 관찰했습니다. 또한이 값은 상수가 아니라는 것을 관찰했습니다. 가끔은 107이고 다른 시간은 114이고 다른 시간은 단지 100입니다. 왜 이런가요? 무슨 일이 생겨? 도움이 필요해? 누군가 제발 .. 제 절차가 있습니다. 그리고 1000 루프 이상 동안 루프가 종료되는 것을 알게되었습니다. 이것을 극복 할 수있는 방법을 제안 해주십시오.while 루프가 일부 데이터를 가져온 후에 종료합니다.

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `lookup`.`test` $$ 
CREATE PROCEDURE `lookup`.`test`() 
BEGIN 

CREATE TEMPORARY TABLE lookup.airportname(id int AUTO_INCREMENT,PRIMARY KEY(id)) 
AS (select distinct airport_id from lookup.airport); 
SET @num=0; 
SET @arpt=NULL; 
SELECT count(*) INTO @num FROM airportname; 
SET @i=0; 

while @i<@num do 
SELECT airport_id INTO @arpt FROM airportname WHERE [email protected]; 
select @arpt,@i;  
set @[email protected]+1; 
end while; 
END $$ 

DELIMITER ; 

mysql 쿼리 브라우저를 사용하고 있습니다. 감사합니다.

+0

어떻게 종료되는지 어떻게 알 수 있습니까? – palindrom

+0

잘 모르겠다 .. : – user2037445

+0

출력이 다듬어 져있을 수 있습니다. 루프 내부의 선택을 삭제하고 루프 뒤에서 같은 선택을하십시오. @i가 13487인지 확인해 봅니다. – palindrom

답변

0

값을 id에 삽입하려는 경우 auto_increment가되어서는 안됩니다. - auto_increment를 테이블 정의에서 제거하면 작동합니다.

+0

나는 그들을 하나씩 가져올 수 있도록 주문해야합니다. 가져올 생각이 있어요. 각 행은 ID를 추가하는 것 이외에? 그렇다면 제게 안내해주십시오. 감사합니다. u – user2037445

+0

계속 핸들러를 사용하면 ... 내 SP 쇼티 중 하나를 붙여 넣을 것입니다. – user170851

0

구분 기호 |

선언 EMPNO를 시작 프로 시저 employee_select()를 생성 할 INT (9)

선언 emp_select gross_salary에서 선택 emp_no에 대한 커서.

DECLARE CONTINUE HANDLER FOR NOT FOUND SET 완료 = 1;

열기 emp_select; // 커서 개방

read_loop : 루프가 하나

fetch emp_select into empno; // fetching the select value into variable empno 

// 참고로 모든 datas 하나를 루핑 시작 //은 : 변수 이름은

IF done THEN 
    LEAVE read_loop; // if no more rows, this makes it to leave the loop" 
END IF; 

//Enter the code you want do for each row 

end loop; 
선택 문에 columne 이름 "과 동일해서는 안됩니다

가까운 emp_select,

끝 |

구분;

+0

커서에만 적용 할 수 있습니까? 아니면 사용할 수 있습니까? 어떤 방법을 위해서? – user2037445

+0

SP 내부에서 루핑 레코드를 사용하기 위해서는 커서를 사용해야합니다 ... 처리기를 계속 처리하는 것은 오류 처리를위한 것입니다. (프로 시저를 계속 실행하려면/오류 코드도 입력하십시오.) 커서를 넘어서야) – user170851

+0

하지만 실시간 커서에서 아무런 이득도 얻지 못합니다. 그래서 커서를 선택하지 않았습니다 .. – user2037445

관련 문제