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 列に依存する Electronics または Manual) に ordernuumer 値があるかどうかを確認し、テーブル 5 にレコードを挿入する必要があります。それ以外の場合はレコードをスキップします。

この要件のために、手順を作成したいと思います。しかし、参照する必要がある基になるテーブル (電子機器/マニュアル) を確認する方法と、それをどのように達成できるかについて、私は立ち往生しています。

さらに、レコードを挿入するためのループをどのように記述すればよいですか。

注: テーブル スキーマを変更することはできません。

4

1 に答える 1

0

PL/SQL プロシージャを使用すると、LOOP 内で切り替えることができますが、OrderNummer が Electronics か Manuals のどちらであるかを確認するだけであれば、命令型アルゴリズムは必要ありません。

詳細テーブルが「Electronics」または「Manuals」のいずれかの 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" が最速の条件です。

于 2013-10-24T15:18:46.413 に答える