请高手帮忙啊:
我有2个表:
表1:
品番   上报日期     到货日期   到货数
a       2011/04/01
b       2011/04/02表2:
 品番   到货日期    到货数
 a      2011/03/20   3
 a      2011/04/03    2
 b      2011/02/12    6如何写一个存储过程:
从表1的第条记录开始循环表2,从表2中查询:
表2.品番=表1.品番  and  表2.到货日期>=表1.上报日期
将表2中的满足以上条件的到货日期,到货数更新到表1中?

解决方案 »

  1.   

    update 表1 set 到货数=(select 到货数 from 表2 where 表2.品番=表1.品番 and 表2.到货日期>=表1.上报日期);
      

  2.   

    如果表2中的满足以上条件的记录最多有一条,那么sql语句可以这么写update 表1 set (到货日期,到货数)=(select 到货日期,到货数 from 表2 where 表2.品番=表1.品番 and 表2.到货日期>=表1.上报日期)但是,如果表2中的满足以上条件的记录不止一条,那么你需要考虑处理逻辑了,同时上面的sql语句也不能使用。
      

  3.   


    create table goods_tb1(
           name varchar2(2),
           stor_dt date,
           arr_dt date,
           num number(5));
    --
    create table goods_tb2(
           name varchar2(2),
           arr_dt date,
           num number(5));
    --
    create or replace procedure pro_update_goods
    as
    begin
         update goods_tb1
         set (arr_dt,num)=
         (select arr_dt,num from goods_tb2
         where goods_tb2.name=goods_tb1.name and
               goods_tb2.arr_dt>goods_tb1.stor_dt);
    end pro_update_goods;
    --
    SQL> select * from goods_tb1;
    NAME STOR_DT     ARR_DT         NUM
    ---- ----------- ----------- ------
    a    2011-4-1                
    b    2011-4-2                SQL> select * from goods_tb2;
    NAME ARR_DT         NUM
    ---- ----------- ------
    a    2011-3-20        3
    a    2011-4-3         2
    b    2011-2-12        6SQL> exec pro_update_goods;
    PL/SQL procedure successfully completedSQL> select * from goods_tb1;
    NAME STOR_DT     ARR_DT         NUM
    ---- ----------- ----------- ------
    a    2011-4-1    2011-4-3         2
    b    2011-4-2