MySQL錯誤,存儲過程死循環錯誤


寫一個存儲過程,結果老報錯,提示說是循環錯誤,

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 設置成非零值。

還有其他一些參數需要調整。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章