寫一個存儲過程,結果老報錯,提示說是死循環錯誤,
call core_getparentjob(10,1,@a) Error Code: 1456.
Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine core_getparentjob
怎麼檢查也不知道哪裏出了問題。
不過執行這條語句,SET @@SESSION.max_sp_recursion_depth=25; 設置循環深度,至少不報錯。
存儲過程
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `core_getparentjob`(in jobId int, in xtype int, out tempJobId int)
BEGIN
DECLARE parentJobId int;
DECLARE tt int;
DECLARE tc int;
set parentJobId = 0;
-- Get the parent job id
select parentId into parentJobId from core_job ta where ta.ID_ = jobId;
-- Get the manager
if xtype = 1 then
set tc = 0;
select count(*) into tc from core_job ta where ta.ID_ = parentJobId and ta.isManager = 1;
if tc = 0 and parentJobId > 0 then
call core_getparentjob(parentJobId,1, tt);
set parentJobId = tt;
end if;
end if;
set tempJobId = parentJobId;
select parentJobId;
END
MySQL官方文檔指出 函數無法用遞歸調用
存儲過程可以用遞歸調用。但是,默認情況下,是禁用的。
要開啓遞歸調用,需要把參數
max_sp_recursion_depth
設置成非零值。
還有其他一些參數需要調整。