我有一个场景,我有5个不同的表:
Table 1 - Product, Columns - ProductId, BatchNummer, Status, GroupId, OrderNummer
Table 2 - ProductGrop, Columns - GropId, ProductType, Description
Table 3 - Electronics, Columns - EId, Description, BatchNummer, OrderNummer, OrderData
Table 4 - Manual, Columns - MId, Description, Status, OrderNummer, ProcessStep
Table 5 - ProcessedProduct, columns same as Product with one extra column of datetime
现在,根据业务流程,我需要填充Product表中的所有数据,并且必须检查基础表(Electronics或Manual,它取决于ProductGoup的ProductType列)是否具有ordernuumer值,然后插入记录在表5“ProcessedProduct”中,否则跳过记录。
对于此要求,我想创建一个过程。但我仍然坚持如何检查哪些基础表(电子/手册)我必须参考以及如何实现。
此外,我应该如何编写用于插入记录的循环。
注意:我无法更改表架构。
答案 0 :(得分:0)
使用PL / SQL程序,您只需在LOOP内切换,但如果只需要检查OrderNummer是电子版还是手册,则不需要必要的算法。
假设详细信息表由ProductType值选择“电子”或“手册”,您可以:
INSERT INTO ProcessedProduct (ProductId, BatchNummer, Status, GroupId, OrderNummer, TS)
SELECT ProductId, BatchNummer, Status, GroupId, OrderNummer, SYSDATE
FROM Product p
INNER JOIN ProductGroup pg USING (GroupId)
WHERE EXISTS (
SELECT NULL FROM Electronics e
WHERE p.OrderNummer = e.OrderNummer
AND pg.ProductType = 'Electronics'
UNION
SELECT NULL FROM Manuals m
WHERE m.OrderNummer = m.OrderNummer
AND pg.ProductType = 'Manuals')
纯SQL始终是最快的方式,“WHERE EXISTS”通常是最快的条件。