2016-08-29 9 views
2

一時的なテーブル "nodesNotHavingCriteria"にエントリが残っている間にループするsybaseのwhileループを作成したいとします。 しかし、以下で作成した手順は永遠に続くようですが、これはwhileループがドンになっているからだと思うが、私はその理由を見つけることができないようだ。 誰も助けることができますか?それは私にとってはうまくいくと思われ、決してループを終了させない理由を見つけることができません。Whileループが永遠に続きます

create PROCEDURE createCriteria 
    as begin 
    declare @uid varchar(10) 
    while (select count(*) from #nodesNotHavingCriteria) > 0 
     set rowcount 1 
     select @uid = nodes from #nodesNotHavingCriteria -- pull one uid from the temp table 
     set rowcount 0 
     delete from #nodesNotHavingCriteria where nodes = @uid -- delete that uid from the temp table 

     -- Do something with the uid you have 
     --insert into BacktestingCriteria (nodeId,hierarchyViewId,varCriteriaId,pnlCriteriaId) values 
    -- (@uid,16008,16,3) 
    --insert into BacktestingCriteria (nodeId,hierarchyViewId,varCriteriaId,pnlCriteriaId) values 
     --(@uid,16008,16,4) 
    end 

答えて

2

あなたのwhileループは、もう一度チェック基準にはならないと思います。それだけで一度だけカウント数を選択して、たぶん、あなたは(JSで擬似コード)のようなものを試してみてください永遠に0に>

をチェック

var count = select count(*) from #nodesNotHavingCriteria; 
while(count > 0) 
    // Do anything 
    count = select count(*) from #nodesNotHavingCriteria; 

また、私は、Sybaseのことは知らないけど#nodesNotHavingCriteriaは本当に後に更新されますあなたはそれから削除?

0

理由を確認しました。 私はしばらくしてから始めることを追加するべきだった。これは動作する

create PROCEDURE createCriteria 
as begin 
declare @uid varchar(10) 
while ((select count(*) from #nodesNotHavingCriteria)>0) 
begin 
    set rowcount 1 
    select @uid = nodes from #nodesNotHavingCriteria -- pull one uid from the temp table 
    set rowcount 0 
    delete from #nodesNotHavingCriteria where nodes = @uid -- delete that uid from the temp table 

    -- Do something with the uid you have 
    insert into BacktestingCriteria (nodeId,hierarchyViewId,varCriteriaId,pnlCriteriaId) values 
(@uid,16008,16,3) 
insert into BacktestingCriteria (nodeId,hierarchyViewId,varCriteriaId,pnlCriteriaId) values 
    (@uid,16008,16,4) 
end 
end 
関連する問題