0
我正在嘗試使存儲過程爲員工應用離職。我的存儲過程如下錯誤號:1172結果包含多個行
當我調用的程序收到以下錯誤
Error Number: 1172
Result consisted of more than one row
CALL start_crediting('2017-02-01')
我需要通過每行中的SELECT查詢功能set_credit_values()。我測試了SELECT查詢,它工作正常,有兩行。當我用光標單獨傳遞每行時,它工作正常。 但在我的現場服務器中有數百名員工。所以我認爲這可能需要更多時間。以下查詢已成功運行,與上面的查詢等效,但此處使用遊標爲每行調用函數set_credit_values
。所以它可能比上面的查詢慢。我需要一個快速工作解決方案。
DELIMITER $$;
CREATE PROCEDURE start_crediting(IN elc_date date)
BEGIN
DECLARE v_finished INT(11) DEFAULT 0;
DECLARE my_lpc_id INT(11) DEFAULT 0;
DECLARE my_emp_id BIGINT(20) DEFAULT 0;
DEClARE emp_cursor CURSOR FOR
-- Taking all active employees with their leave policy, those are having a leave policy assigned.
SELECT lpc_id,emp_id FROM erp_leave_policy,erp_employees,erp_clients,erp_employee_leave_policy
WHERE emp_status=1 AND cli_status=1 AND lpc_status=1 AND
emp_id = elp_fk_employees AND lpc_id = elp_fk_leave_policy AND cli_id = emp_fk_clients;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
OPEN emp_cursor;
get_emp: LOOP
FETCH emp_cursor INTO my_lpc_id,my_emp_id;
IF v_finished = 1 THEN
LEAVE get_emp;
END IF;
-- calling function inseterLeave()
SELECT set_credit_values(my_emp_id,my_lpc_id,elc_date) FROM DUAL;
END LOOP get_emp;
CLOSE emp_cursor;
END $$;
DELIMITER ;