假设我有两个表,例如:
Product
prd_id prd_name parent_prd_id ...
123 Foo <null>
456 Bar <null>
789 Baz <null>
Product_Parent_Relation_Batch
prd_id prd_parent_id processed
555 888 T
123 789 F
456 789 F
Run Code Online (Sandbox Code Playgroud)
我无法将关系数据直接加载到产品中。父母有可能在孩子之前不存在。不管设计是否糟糕,事情就是这样。要更新产品表,我会进行相关更新,例如:
我想用父 ID 789 填充产品 123 和 456,并将 123 和 456 设置为产品父关系批处理表中的processed = 'T'。看来我只能做一件事了。
我是否被迫在应用程序中执行此操作,在该应用程序中查询与现有产品记录具有匹配的 prd_id 的所有未处理的批记录,为产品表执行一个单独的更新语句,为关系批处理表执行另一个更新语句,对于所有适用记录?
CREATE OR REPLACE PROCEDURE sync_prd_with_parent
IS
cursor c1 is
select prd_id, parent_prd_id
from product_parent_relation_batch
inner join product on product_parent_relation_batch.prd_id = product.prd_id
where product_parent_relation_batch.processed = 'F';
BEGIN
FOR rec in c1
LOOP
UPDATE product SET parent_prd_id = rec.parent_prd_id WHERE prd_id = rec.prd_id;
UPDATE product_parent_relation_batch SET processed = 'T' WHERE product_parent_relation_batch.prd_id= rec.prd_id;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
除非发布更好的建议,否则我将满足于上述 PL/SQL 程序。
在同一查询中更新多个表受到物理限制。
这种情况的可行解决方案是创建一个应用程序(PL/SQL 或其他应用程序)来获取需要更新的两个表的信息,迭代结果,并在每次迭代中更新各个语句中的表。
| 归档时间: |
|
| 查看次数: |
49760 次 |
| 最近记录: |