有两个表,订货表和入库表订货表,有字段:订单号,供货商,订货日期,到货日期
入库表,有字段:订单号,入库日期,是否按时到货如果入库日期不大于到货日期,就是按时到货,否则为否。现要求,写一个存储过程,在录入入库时间时,比较入库表中的“入库日期”和订货表中的“到货日期”,如果“入库日期”不大于“到货日期”,就在入库表中的“是否按时到货”字段中写入“是”,否则写入“否”。这个存储过程应该怎么写啊?请高手帮帮忙,急用

解决方案 »

  1.   


    create or replace procedure p1
    as
    rkrq date;
    dhrq date;
    cursor cur_dd is select 入库日期,到货日期 from 订货表 a,入库表 b where a.订单号=b.订单号;
    begin
    for cur_dd_rec in cur_dd loop
    rkrq:=cur_dd_rec.入库日期;
    dhrq:=cur_dd_rec.到货日期;
    if rkrq<=dhrq then
    update 入库表 set 是否按时到货='是';
    else 
    update 入库表 set 是否按时到货='否';
    end if;
    end loop;
    commit;
    end;
      

  2.   

    --可以用前面的过程建个作业,定在什么时候执行作业
    --也可以用触发器create  trigger tr1 after insert on 入库表 for each row
    declare
    rkrq date;
    dhrq date;
    cursor cur_dd is select 入库日期,到货日期 from 订货表 a,入库表 b where a.订单号=b.订单号;
    begin
    for cur_dd_rec in cur_dd loop
    rkrq:=cur_dd_rec.入库日期;
    dhrq:=cur_dd_rec.到货日期;
    if rkrq<=dhrq then
    update 入库表 set 是否按时到货='是';
    else 
    update 入库表 set 是否按时到货='否';
    end if;
    end loop;
    commit;
    end;
      

  3.   

    这个不需要写一个存储过程吧,直接在前台处理更好。
    当然也可以写一个触发器或者存储过程来处理。
    如:触发器例子
    CREATE OR REPLACE TRIGGER tr_ontime
      AFTER INSERT OR UPDATE ON 入库表
      FOR EACH ROW
    DECLARE
      v_date DATE;
    BEGIN
      SELECT 到货日期 INTO v_date FROM 订货表 WHERE 订单号 = :new.订单号;
      IF :new.入库日期 > v_date THEN
        :new.是否按时到货 := '是';
      ELSE
        :new.是否按时到货 := '否';
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
    END;