入库主表(入库单编号、入库日期、保管员、采购员、供应商);
入库详细表(入库单编号、商品编号、入库数量);
帐表(年,月,商品编号、期初数量,入库数量、出库数量、最终数量);入库主表 与入库详细表 是 1:N 的关系。当入库主表和入库详细表中内容被修改后,如何改写帐表?
帮忙写个存储过程。

解决方案 »

  1.   

    merge into 帐表 t1
    using 
      (select .... from 入库主表 a,入库详细表 b where a.入库账单编号=b.入库账单编号
        group by ...)t2
    on (t1.年月=t2.年月 and t1.商品编号=t2.商品编号)
    when matched then 
    update ...
    when not matched then
    insert ...
      

  2.   

    主要是业务啊,SQL语句不难
    年月来自主表的入库日期
    期初数量根据帐表计算得出(规则不知)
      

  3.   

    不建议采用触发器,存储过程较好。
    建议每向明细表插入一条记录时,调用此存储过程一次。
    参考存储过程如下:
    create or replace procedure sp_update_inv_account 

        p_Year IN NUMBER,--年
        p_Month IN NUMBER,--月
        p_GoodsNo IN VARCHAR2,--商品编号
        P_Qty     IN NUMBER,--入库数量
        p_MsgID OUT NUMBER,--返回ID,0表示成功,-1表示失败
        p_ErrMsg OUT VARCHAR2--错误详细信息

    IS
       V_INV_REC 帐表%ROWTYPE;
    BEGIN
        p_MsgID:=0;
        p_ErrMsg:='';
        BEGIN
           EXECUTE IMMEDIATE 'SELECT * FROM 帐表 WHERE 年=:1 AND 月=:2 AND 商品编号=:3 FOR UPDATE' INTO V_INV_REC USING p_Year,p_Month,p_GoodsNo ;
         EXCEPTION WHEN OTHERS THEN
            EXECUTE IMMEDIATE 'INSERT INTO 帐表(年,月,商品编号、期初数量,入库数量、出库数量、最终数量)VALUES(:1,:2,:3,:4,:5,:6,:7)' USING p_Year,p_Month,p_GoodsNo,0,P_Qty,0,P_Qty;
        END ;   
        RETURN;
    EXCEPTION HEN OTHERS THEN
         p_ErrMsg:='更新帐表失败'; 
         p_MsgID:=-1;
    END;
      

  4.   

    create or replace procedure changeAccount
    begin
       give my procedure and i will give scoreend。
      

  5.   

    楼上的写的很好
    但有两点可能我没说清楚:
    1,如果入库单被修改后,存储过程对帐进行修改,不是插入的时候修改。
    2 ,最好用ORACLE ,小第不清楚的 是:入库单被修改后,该怎么对帐进行修改。或着把思路讲明白也可以
      

  6.   

    没看清楚,原表中已经有了,就是入库主表中的入库日期字段
    比如上次更新帐表时间是to_date('20090901120000','yyyymmddhh24miss')
    那么这次更新只需
    加入 入库日期>to_date('20090901120000','yyyymmddhh24miss') 这个条件来筛选数据,两表连接后的添加到帐表中即可
      

  7.   

    由于牵涉到期初数量,所以要关联帐表,3表连接查询得出结果
    再将结果插入帐表
    你给的例子比较模糊,代码很难写。也不知道出库数量从哪儿来,还有年月是怎么回事你可以参考下
    select ...
    from 入库主表 a,入库详细表 b,帐表 c
    where a.入库单编号=b.入库单编号
      and b.商品编号=c.商品编号
      and a.入库日期>:lastupdatetime
      and c.入库日期=:lastupdatetime
    group by trunc(a.入库日期,'mm'),b.商品编号
      
    根据需要来修改
      

  8.   

    帐表是根据 年、月、商品ID 进行统计的,比如 我插入一张入库单[  090205(入库单号),2009-9-10(时间),张进(保管员),北京天空(供应商) 
      090205(入库单号),1(商品ID), 100 (入库数量)
      090205(入库单号),2(商品ID), 50 (入库数量)]
    插入入库单后把年,月,商品ID 、入库数量都写到 2009 年9 月帐上去了。
    现在我对这入库单进行修改,这个帐该怎么处理了,,也就是这个存储过程该怎么写了?
     
      

  9.   

    先取 入库主表 入库日期为你最近更新或者要统计的时间, 获取年,月,入库单
    根据入库单 获取商品ID,入库数量 
    这样一来就知道, 该商品ID的年和月,数量
    根据年,月,商品ID 更新帐表数量!