2012-09-11 38 views
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 

現在,根據業務流程,我需要填充的產品表中的所有數據,並且必須檢查基礎表(電子產品或手冊,其取決於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」通常是最快的條件。