需要实现的目的是table1,table2,table3计3个表
首先在table1种select 几个指定字段,(这几个字段中有依存关系),
判断指定字段的值是否为指定值,
如果是
 继续判断另外一个字段的值是否为指定值,
    如果是
    执行一个更新操作,
    插入到table3的一个字段,而出入值为table1中字段值乘以 从table2中取出的特定值。
   更新条件为 table1和table3的关联外键。
    如果不是继续判断他是否等于另外一个指定值,
     继续以上流程
如果不是继续判断是否等于另外一个指定值
继续以上流程如果看不明白问题的
我的msn   [email protected]
qq   22538768
分不够可以加

解决方案 »

  1.   

    table1 
    字段
    good1,good2,goodtype,goodfor,goodNo
    aaa,bbb,1,user,a1
    ccc,ddd,2,admin,a2
    table2
    字段
    gos,gostype,gosprice
    1,tt,20
    2,ast,30
    table3
    字段
    goodNolink,goodsales
    a1,  waiting for update
    a2,table1,table2,table3计3个表
    首先在table1种select good1,good2,goodtype,goodfor,goodno,(这几个字段中有依存关系 ,goodtype=1 取good1,类似),
    判断指定字段goodfor的值是否为指定值 比如user,
    如果是
     继续判断另外一个字段goodtype的值是否为指定值比如 1,
        如果是
        执行一个更新操作,
        插入到table3的一个字段,而出入值为table1中good1字段值乘以 从table2中取出的特定值( gosprice )。
       更新条件为 table1和table3的关联外键 table3.goodnolink=table1.goodno。
        如果不是继续判断他是否等于另外一个指定值比如 2,
         继续以上流程
    如果goodfor的值不是  继续判断是否等于另外一个指定值 比如admin
    继续以上流程
      

  2.   

    user,admin这些指定值哪来的?
      

  3.   

    create or replace procedure update_table3 is
    cursor ub is select * from table1;
    user varchar2(50);
    admin varchar2(50);
    begin
    for tab in ub loop
    if tab.goodfor=user or tab.goodfor=admin then
    if tab.goodtype=1 then
    update table3
    set goodsales=tab.good1*(select gosprice from table2 where gos=tab.goodtype and rownum=1)
    where goodnolink=tab.goodno;
    elseif tab.goodtype=2 then
    update table3
    set goodsales=tab.good2*(select gosprice from table2 where gos=tab.goodtype and rownum=1)
    where goodnolink=tab.goodno;
    end if;
    end if;
    end loop;
    commit;
    end;
      

  4.   

    CREATE OR REPLACE PROCEDURE UPDATE_TABLE3_TEST
    (
    p_GOODFOR1 TABLE1.GOODFOR%TYPE,
    p_GOODFOR2 TABLE1.GOODFOR%TYPE,
    p_GOODTYPE1 TABLE1.GOODTYPE%TYPE,
    p_GOODTYPE2 TABLE1.GOODTYPE%TYPE
    )
    /*
    参数说明:
    p_GOODFOR1 GOODFOR指定值1
    p_GOODFOR2 GOODFOR指定值2
    p_GOODTYPE1 GOODTYPE指定值1
    p_GOODTYPE2 GOODTYPE指定值2
    */
    AS
    v_CURR_GOOD TABLE1.GOOD1%TYPE;
    CURSOR  TABLE1_INFO 
    IS
    SELECT * FROM TABLE1 WHERE GOODFOR = p_GOODFOR1 OR GOODFOR = p_GOODFOR2;
    BEGIN
    FOR c_TABLE1_INFO IN TABLE1_INFO LOOP
    IF c_TABLE1_INFO.GOODTYPE = p_GOODTYPE1 THEN
    v_CURR_GOOD := c_TABLE1_INFO.GOOD1;
    ELSIF  c_TABLE1_INFO.GOODTYPE = p_GOODTYPE2 THEN
    v_CURR_GOOD := c_TABLE1_INFO.GOOD2;
    ELSE
    v_CURR_GOOD := NULL;
    END IF;

    IF v_CURR_GOOD IS NOT NULL THEN
    UPDATE TABLE3
    SET GOODSALES=v_CURR_GOOD *(SELECT GOSPRICE FROM TABLE2 WHERE c_TABLE1_INFO.GOODTYPE AND ROWNUM=1)
    WHERE GOODNOLINK=c_TABLE1_INFO.GOODNO;
    END IF;

    END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SUBSTR('ERROR:'||SQLERRM,1,255));
    END UPDATE_TABLE3_TEST;
    注:以上过程未经调试,如有错误,楼主自己检查下
      

  5.   

    已经写出来了,我就不掺和了 qiaozhiwei(乔) 的写法值得很多人学习!