Sql 更新查询无法正确更新-Oracle

Sql 更新查询无法正确更新-Oracle,sql,oracle,oracle11g,sql-update,Sql,Oracle,Oracle11g,Sql Update,在我之前的查询之后,我继续并重写了整个查询,如下所示: 表A通过[PRD\u ID,PRD\u VER,PY\u ID,TPY\u ID]上的一对多关系连接到表B,表C通过[PRD\u GTIN\u ID]上的一对一关系连接到表B。我需要将表A上的X,Y,Z列复制到表C上的X,Y,Z列 DECLARE CURSOR eachRec IS SELECT cgl.prd_gtin_id, tc.PRD_SPL_OR_QTY_MULTIPLE FROM B cgl, A

在我之前的查询之后,我继续并重写了整个查询,如下所示:

表A通过
[PRD\u ID,PRD\u VER,PY\u ID,TPY\u ID]
上的一对多关系连接到表B,表C通过
[PRD\u GTIN\u ID]
上的一对一关系连接到表B。我需要将表A上的X,Y,Z列复制到表C上的X,Y,Z列

DECLARE CURSOR eachRec IS 
SELECT  cgl.prd_gtin_id,
        tc.PRD_SPL_OR_QTY_MULTIPLE
FROM B cgl,
     A tc
WHERE cgl.prd_id       = tc.prd_id
  AND cgl.prd_ver      = tc.prd_ver
  AND cgl.py_id        = tc.py_id
  AND cgl.tpy_id       = tc.tpy_id;

BEGIN
  FOR EACH_ROW IN eachRec
  LOOP
    UPDATE C
    SET    C.PRD_ORDER_QTY_MULTIPLE=EACH_ROW.PRD_ORDER_QTY_MULTIPLE
    WHERE  C.prd_gtin_id = EACH_ROW.prd_gtin_id;
  END LOOP;
END;

查询除了更新正确的匹配项外,还更新不正确的随机行。如果有人能帮我找到我写的查询的问题吗?

这里您真正需要的是理解密钥保留表和可更新联接视图的概念

由于这些都是非常重要的主题,而且Oracle在文档中对它们做了很好的介绍,因此我将向您介绍相关文档:

如果您能够阅读和理解这些概念,那么使用一条update语句来做您想做的事情应该不会有问题,因为这条语句将更清晰、更容易理解,并且速度更快、效率更高


希望对您有所帮助。

您在这里真正需要的是理解密钥保留表和可更新联接视图的概念

由于这些都是非常重要的主题,而且Oracle在文档中对它们做了很好的介绍,因此我将向您介绍相关文档:

如果您能够阅读和理解这些概念,那么使用一条update语句来做您想做的事情应该不会有问题,因为这条语句将更清晰、更容易理解,并且速度更快、效率更高


希望有帮助。

为什么要使用光标?您只需使用一条update语句就可以实现同样的效果,这将比游标方法快很多。这只需要执行一次(类似于要更新30K记录的迁移)。我唯一关心的显然是查询结果的准确性。为什么要使用光标?您只需使用一条update语句就可以实现同样的效果,这将比游标方法快很多。这只需要执行一次(类似于要更新30K记录的迁移)。我唯一关心的显然是查询结果的准确性。