그렇게 만들려고했지만 한 행만 반환합니다. 절차는 첫 번째 선택 후 종료됩니다.
DROP PROCEDURE IF EXISTS testProc;
DELIMITER $$
CREATE PROCEDURE testProc(start_stamp INT, end_stamp INT, step INT)
BEGIN
DECLARE tmpStep INT;
SET tmpStep = start_stamp;
WHILE tmpStep < end_stamp DO
SELECT tmpStep;
SET tmpStep = tmpStep + step;
END WHILE;
END$$
DELIMITER ;
CALL testProc (1,10,1);
이 경우 원하는 동작은 1에서 10까지의 숫자를 반환하는 것입니다.
동적으로 생성 된 결과 집합을 반환하는 프로 시저를 만들려면 내부적으로 임시 테이블을 만든 다음이를 선택해야합니다. 다음 코드가 작업을 수행해야합니다.
DROP PROCEDURE IF EXISTS testProc;
DELIMITER $$
CREATE PROCEDURE testProc(start_stamp INT, end_stamp INT, step INT)
BEGIN
DECLARE tmpStep INT;
DROP TABLE IF EXISTS `testProc$tmp`;
CREATE TEMPORARY TABLE `testProc$tmp` (a INT);
SET tmpStep = start_stamp;
WHILE tmpStep < end_stamp DO
INSERT INTO `testProc$tmp` VALUES(tmpStep);
SET tmpStep = tmpStep + step;
END WHILE;
SELECT * FROM `testProc$tmp`;
END$$
DELIMITER ;
CALL testProc (1,10,1);
이 코드는 함수 호출 후 임시 테이블을 그대로 두지 만 다른 테이블과 충돌하지 않도록 이름이 "모호하게"생성됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다