小弟是刚学sql,碰到个问题。需要写个存储过程,那位大牛腾出2分钟帮忙费费心,小弟在这里谢谢了。
有3个表 ,a    b  c
a里面就2列,   gid   l1  l2
b里面3猎       gid   l3   l4
c里面2猎       gid   l5执行这个:
   
如果a.l2  =1
   将b的l3值 改为c的l5
否则
   将b的l4   改为c的l5  

解决方案 »

  1.   

    实测数据:CREATE TABLE T155
    (
        GID NUMBER(2),
        F1 NUMBER(4),
        F2 NUMBER(4)
    );
    INSERT INTO T155 VALUES(1, 10, 0);
    INSERT INTO T155 VALUES(2, 15, 1);
    INSERT INTO T155 VALUES(3, 20, 0);CREATE TABLE T156
    (
        GID NUMBER(2),
        F3 NUMBER(4),
        F4 NUMBER(4)
    );
    INSERT INTO T156 VALUES(1, 100, 101);
    INSERT INTO T156 VALUES(2, 200, 201);
    INSERT INTO T156 VALUES(3, 300, 301);CREATE TABLE T157
    (
        GID NUMBER(2),
        F5 NUMBER(4)   
    );
    INSERT INTO T157 VALUES(1, 1000);
    INSERT INTO T157 VALUES(2, 2000);
    INSERT INTO T157 VALUES(3, 3000);COMMIT;
    存储过程:CREATE OR REPLACE PROCEDURE ProcUpdateT156 
    IS
        CURSOR curT155 IS SELECT GID, F1, F2 FROM T155;
        vF5 T157.F5%TYPE;
    BEGIN
        FOR r IN curT155 LOOP
            SELECT F5 INTO vF5 FROM T157 WHERE GID = r.GID;
            IF r.F2 = 1 THEN            
                UPDATE T156 SET F3 = vF5 WHERE GID = r.GID;
            ELSE
                UPDATE T156 SET F4 = vF5 WHERE GID = r.GID;                    
            END IF;                                 
        END LOOP;
        COMMIT;        
    END ProcUpdateT156;
    执行存储过程:begin
      -- Call the procedure
      procupdatet156;
    end;
    最终结果: