두 개의 커서를 사용하여 해당 부서에 속한 직원의 부서에 따라 total_sal 열을 업데이트하는 저장 프로 시저를 설계했습니다.저장 프로 시저/커서 논리
올바른 결과를 얻지 못하고 저장 프로 시저 및 커서의 흐름에 잘못된 아이디어가있을 수 있습니다.
나는이 달성하기 위해 사용하려고 논리 : 부서 번호를
3 열려있는 커서를 얻을 부서의 각 행에서 부서
2을 반복하는
1 열려있는 커서를 직원의 부서 번호가 부서의 커서에서 부서 번호와 동일한 경우, 각 직원에서 직원
3- 반복하는, 우리는 total_sum에 자신의 급여를 추가
5 직원 테이블은 우리가 마침내 total_sum과 부서의 total_salary를 업데이트 소진 된 후
- 6 단계에서 다시 시작이 여기에
는 저장 프로 시저입니다 : 여기
CREATE PROCEDURE updateSalary()
BEGIN
DECLARE emp_sal, eDno, dDno INT;
DECLARE total_sum INT DEFAULT 0;
DECLARE finished INT DEFAULT 0;
DECLARE dep_cursor CURSOR FOR SELECT Dno FROM Department;
DECLARE emp_cursor CURSOR FOR SELECT Dno, Salary FROM Employee;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
open dep_cursor;
department_loop: LOOP
FETCH dep_cursor INTO dDno;
IF finished = 1 THEN
LEAVE department_loop;
END IF;
open emp_cursor;
employee_loop: LOOP
FETCH emp_cursor INTO eDno, emp_sal;
IF eDno = dDno THEN
SET total_sum = total_sum + emp_sal;
END IF;
IF finished = 1 THEN
update department SET total_sal = total_sum WHERE department.dno = dDno;
LEAVE employee_loop;
END IF;
SET total_sum = 0;
END LOOP employee_loop;
close emp_cursor;
END LOOP department_loop;
CLOSE dep_cursor;
END;
/
가있다 SQLFiddle 나는 함께 일해 왔습니다. http://sqlfiddle.com/#!2/b9cc2f/1/1
저는 자바 디버깅에 익숙하지 않습니다. 만약 이것이 Java라면, 어떤 인쇄 진술을 던져서 무슨 일이 일어나는지 보겠습니다. 엔.
저장 프로 시저를 사용하여 모든 happies, 당신은 그것을 호출 할 필요가 한 부서에서 기록을 변경할 때마다 대신 dept 테이블에서 total_sal 값의 자동 업데이트를 유발하는 트리거를 사용하십시오. –
@Ravinder 이것은 저장 프로 시저와 커서를 사용해야하는 할당입니다. –