我有一個sp基於while條件遞歸運行。但條件不符合預期。雖然條件在我的sql
BEGIN
declare moduleid VARCHAR(3);
declare parent VARCHAR(3);
declare flag int DEFAULT 0;
SET max_sp_recursion_depth = 3;
set moduleid = mdlid;
set parent = '';
set flag = 0;
select moduleid;
set parent = (
select
ms.parentModule as parentModule
from
x ms
where
ms.moduleid = moduleid
);
select parent;
set flag = if('MNU' = parent, 0, 1);
select flag;
while (flag <> 0) DO
select
ms.menuname
from
x ms
where
ms.moduleId = parent;
select 'called recursive';
call usp_testwhile(parent);
end WHILE;
END
儘管標誌值爲0執行中的內部語句。
此sp的初衷是當父母是MNU時停止。 對於例如x的表結構如下,
moduleid parentmodule menuname
aaa bbb alpha1
bbb ccc alpha2
ccc MNU alpha3
預期功能是 呼叫spname( 'AAA');
現在模塊ID是aaa,父母是bbb。在我檢查父項時= ='MNU'條件失敗並且週期2開始
現在模塊ID是bbb,父母是ccc。當我檢查父母!='MNU'條件失敗,週期3開始
現在模塊ID是ccc,父母是MNU。在我檢查父母時!='MNU'條件滿足,應該停止執行。
你'flag'變量不是靜態的或全球性的 - 這是本地的存儲過程的範圍 - 如果從自身調用存儲過程的再flag'的'一個新實例(和'moduleid','parent'和' max_sp_recursion_depth')將被創建。您需要傳遞深度指標作爲參數。 – Dai
@戴,這肯定是正確的答案,那麼爲什麼不把它作爲一個呢? –