未测试,随手写的create or replace procedure aaaaaa(sBeginDate in date) as
i_code number;
cursor c_cur is 
   select  A.表1.单位编码 from A.表1;
begin
  open c_cur;
   loop
   fetch c_cur into i_code;
   exit when c_cur %NOTFOUND;
   
    update A.表1 set A.表1.总数 = (select count(*) from B.表2 where B.表2.登记日期 <= sBeginDate AND B.表2.单位编码 = i_code) where A.表1.单位编码 = i_code;
   COMMIT;
  END LOOP;
  CLOSE c_cur;
 end;

解决方案 »

  1.   

    To  nicholaz(九思·逢尤) 兄弟果然是高手中之高高手,在下佩服,佩服。现有一个小小的错误和几个小小的疑问,还望兄弟不吝赐教。
    1、按照你的方式将存储过程建立在方案A中,提示说方案B的表(select count(*) from B.表2 )无效或不存在啊。
    2、送我一张渔网吧。我问题中只是一个简化的模型。实际应用中要复杂一些。所以有几个疑问还请指教: 
    a、阁下的c_cur是一个临时表吗? 
    b、我的A.表1.单位编码是字符型,是不是应该将 i_code number改了啊。
    c、在实际查询时B.表2.单位编码 = i_code不是等于,而是LIKE 如单位编码 "LIKE 2301%",可以么?在下的问题可能很蠢,望见谅。
      

  2.   

    create procedure pro(p_sBeginDate in date)
    as
    begin
    update 表1 set 总数=(select count(1) from 表2 where 表1.单位编码=表2.单位编码 and 登记日期>p_sBeginDate group by 表1.单位编码);
    end;
    /
      

  3.   

    1、你要用grant给你登陆用户权限,来查询B方案的表2
    2、a.  c_cur是游标
       b.  你按自己的数据类型改
       c.  like可以