2

我有一个场景,我有 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 表中填充所有数据,并且必须检查基础表(电子或手动,取决于 ProductGoup 的 ProductType 列)是否具有 ordernuumer 值,然后在表 5 中插入一条记录"ProcessedProduct" 否则跳过记录。

对于这个要求,我想创建一个程序。但是我被困在如何检查我必须参考哪个基础表(电子/手册)以及如何实现它。

此外,我应该如何编写插入记录的循环。

注意:我无法更改表架构。

4

1 回答 1

0

使用 PL/SQL 过程,您可以只在 LOOP 内切换,但如果您只需要检查 OrderNummer 是属于电子产品还是手册,则不需要命令式算法。

假设通过 ProductType 值“Electronics”或“Manuals”选择明细表,您可以:

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”通常是最快的条件。

于 2013-10-24T15:18:46.413 回答