【发布时间】:2011-11-05 15:15:13
【问题描述】:
根据我之前的查询Update Query,我继续重写整个查询,如下所示:
表 A 通过[PRD_ID, PRD_VER, PY_ID, TPY_ID] 上的一对多关系连接到表 B,表 C 通过[PRD_GTIN_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;
该查询除了更新正确的匹配项外,还更新了不正确的随机行。谁能帮我找出我写的查询的问题?
【问题讨论】:
-
为什么要使用游标?您只需一条更新语句即可实现相同的目的,这将比您的游标方法快很多。
-
好吧,我并不真正关心这个查询的性能。这将只完成 1 次(类似于要更新 30K 记录的迁移)。我唯一关心的显然是查询结果的准确性。
标签: sql oracle oracle11g sql-update