gpt4 book ai didi

oracle - 同时更新两个表 - Oracle

转载 作者:行者123 更新时间:2023-12-04 12:01:41 32 4
gpt4 key购买 nike

假设我有两个表,例如:

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

我无法将关系数据直接加载到产品中。 parent 有可能在 child 之前不存在。糟糕的设计与否,就是这样。要更新产品表,我会做一个相关的更新,如:

Oracle SQL: Update a table with data from another table

我想用父 ID 789 填充产品 123 和 456,并在产品父关系批处理表中将 123 和 456 设置为 processing = '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;

除非发布更好的建议,否则我将接受上述 PL/SQL 程序。

最佳答案

一种是物理上限制更新同一查询中的多个表。

对于这种场景,一个可行的解决方案是创建一个应用程序 - PL/SQL 或其他方式,获取需要更新的两个表的信息,迭代结果,并在每次迭代中更新各个语句中的表。

关于oracle - 同时更新两个表 - Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007216/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com