我在interbase中的这个过程运行得太慢了。运行需要十分之一秒,但对于250万行,它需要2整天(我猜数学加起来)
无法将客户端的数据库关闭2天,所以我决定我们一次只在一行选定的行上运行proc,这显然会花费更少的时间,每天晚上在几天的时间内完成。出于某种原因,虽然看起来它完全没有错误地运行,但proc什么也没做。
for select custid, areacode, primarytel, PRIMARYTELID
from customers
where (primarytelid || '' is null or primarytelid || '' = '')
and areacode is not null and areacode <> ''
and primarytel is not null and primarytel <> ''
rows 10
into :custid, :AREACODE, :primarytel,:PRIMARYTELID do
begin
select primarytelid from PHONENUM_REFRESH(:CUSTID,:AREACODE,:PRIMARYTEL,'') into :primarytelid;
update customers set primarytelid = :primarytelid where custid = :custid;
end
在这个例子中,我故意只处理前10行,所以我可以监视它。但是proc什么也没做,它没有更新任何东西。它刚刚结束,没有任何改变。这个proc在没有ROWS语句的情况下运行得很好,这就是为什么我现在感到困惑。是否存在与此设置不兼容的内容?我会以不同的方式实现我想要的吗?