日期:2014-05-16  浏览次数:20862 次

求救,如何将A表的值赋值给C表,A表的和C表的一个外键B表的主键
大侠们,帮忙看下,环境是ORACLE,利用游标循环执行赋值:
DECLARE 
    v_nmoney         A.nmoney%TYPE; 
    v_csourcebillid  A.csourcebillid%TYPE; 
    CURSOR   c_A  IS 
        SELECT csourcebillid,nmoney FROM A where cbillid in (select cbillid from A  where bestimateflag='Y' and dr=0 and pk_unit='1003') 
BEGIN   
    OPEN   c_A; 
    LOOP 
        FETCH  c_A INTO v_csourcebillid,v_nmoney; 
        UPDATE  C SET bbye =v_nmoney WHERE  ddlx=v_csourcebillid ;
        EXIT WHEN  c_A%NOTFOUND; 
        commit;
    END   LOOP; 
    CLOSE  c_A; 
END; 

执行时出现错误:
------最佳解决方案--------------------
方案1
update A
set A.bbje=C.bbje
 FROM A INNER JOIN C ON A.pk_B= C.pk_B

其他条件自己补充
下边这种方法貌似也行

方案2
update (select A.bbje bbje,C.bbje bbjeTemp from A,C where A.pk_B=C.pk_B )
set bbje=bbjeTemp

都没试,但是凭经验应该能用
------其他解决方案--------------------
看不明白 你还是把表结构贴出来吧
SELECT csourcebillid,nmoney FROM A where cbillid in (select cbillid from A where bestimateflag='Y' and dr=0 and pk_unit='1003')
为什么要这么写?
------其他解决方案--------------------

--兩個換下位置,不可以按你那樣寫在loop內的
  END LOOP;  
  commit;

------其他解决方案--------------------
 #2楼,还是不可以,提示:pls-00103 出现符号 fetch 在需要下列之一时:
begin fucntion package
progma procedure subtype type  use<an identifier> 
<a double-quoted delimited-identifier> form current cursor
这个错误在网上看似有挺多的,但是解决方法不适合我这个,那个大侠,帮忙重新写个语句。
#1 楼,表的结构大致是这样可以描述:
A:{pk_A,bbje,pk_B} B:{pk_B},C:{pk_C,bbje,pk_B} 如何将C表的bbje赋值给A表。