Sql 使用For Select Do,具有预先确定的有限行数,无法正常工作

Sql 使用For Select Do,具有预先确定的有限行数,无法正常工作,sql,interbase,Sql,Interbase,我在interbase中的这个进程运行得太慢了。运行需要十分之一秒,但对于250万行,需要整整两天(我猜数学加起来) 客户机的数据库在2天内无法关闭,因此我决定一次只在选定的行范围内运行proc,这肯定会花费更少的时间,并且每天晚上在几天的时间内在下班后完成。出于某种原因,虽然看起来它运行完全没有错误,但proc什么也不做 for select custid, areacode, primarytel, PRIMARYTELID from customers where

我在interbase中的这个进程运行得太慢了。运行需要十分之一秒,但对于250万行,需要整整两天(我猜数学加起来)

客户机的数据库在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
选择客户ID、区号、primarytel、PRIMARYTELID
来自客户
其中(primarytelid | | |“”为null或primarytelid | |“”=“”)
且区号不为空且区号为“”
primarytel不为空且primarytel“”
第10行
进入:custid,:区号,:primarytel,:PRIMARYTELID do
开始
从PHONENUM_REFRESH(:CUSTID,:AREACODE,:PRIMARYTEL,'')中选择primarytelid到:primarytelid;
更新客户集primarytelid=:primarytelid,其中custid=:custid;
结束

在这个例子中,我故意只处理前10行,所以我可以监视它。但是proc什么也不做,它不更新任何东西。它只是结束了,什么都没有改变。这个过程在没有ROWS语句的情况下运行得很好,这就是我现在感到困惑的原因。是否有与此设置不兼容的内容?我会以不同的方式实现我想要的吗?

明白了,尽管坦率地阅读问题确实回答了问题,因此如果由于标签而产生混乱,正确阅读应该可以避免这个问题。然后以不同的方式表述您的初始答复,我显然还不是这个网站的超级用户,越来越明显的是,它有自己的一套规则,不同于通常的论坛网站。你可以不那么屈尊俯就,在需要的时候给我指点常见问题。这将简化让人们熟悉网站规则的过程,而不会让那些只是想得到一手的人有不好的品味。好吧,我理解这一点。作为一个有行政权力的小伙子,我们现在可以清理评论,这样在一个问题中,它看起来不像是一个论证的粪坑吗?我想重新提出我的问题,但我肯定这违反了指导原则。如果我的问题不涉及无关的政治,那就好了