组件' Y'必须声明(用一个组件更新另一个表)

时间:2015-02-18 14:50:44

标签: sql oracle oracle-sqldeveloper

遇到问题“组件'Y'必须在声明时声明”。如何修复代码?

AB表的PN变量与PARTS相同。 或者,当pn匹配时,可能还有另一种方法用其他表信息更新表吗?

DECLARE
   CURSOR C1 IS
  SELECT  *  FROM AB LEFT JOIN PARTS ON AB.PN=PARTS.PN where AB.FH_FC_WOF = 'FH' AND AB.OPERATION = 'OH' AND ab.pn=parts.pn ;
BEGIN
 FOR i in C1
 LOOP
   UPDATE PARTS
   SET PARTS.OH_HOURS = i.FLIGHT_DURATION
   WHERE  PARTS.PN=i.PN;  
 END LOOP;
  COMMIT;
END;

1 个答案:

答案 0 :(得分:0)

你真的需要一个游标吗?你不能只是做一个更新:

update parts p1 set p1.OH_HOURS = (select FLIGHT_DURATION
                                   from FROM AB LEFT JOIN PARTS ON AB.PN = PARTS.PN
                                   where AB.FH_FC_WOF = 'FH' AND AB.OPERATION = 'OH'
                                     AND ab.pn = p1.pn)

子选择是否可能返回超过1行?如果是这种情况,您可能会更改为= (select MAX(FLIGHT_DURATION),或以其他方式将结果限制为1行(FETCH FIRST等)