2017-11-17 4 views
0

別のクエリから計算されたフィルタの配列に基づいてテーブルからデータを選択しようとしています。私は以下の疑似コードで を達成しようとしていることを説明しようとしました。Oracleストアドプロシージャのviaループを選択

SELECT Equipment, MIN(TIME) as FractionStart, MAX(TIME) as FractionEnd 
INTO FRACTIONS 
FROM DATA 
WHERE ID = 1 
GROUP BY (Equipment) 

/* Pseudo code */ 
FOR EACH ROW IN FRACTIONS 
    INSERT INTO MYTABLE (SELECT * FROM EVENTTABLE WHERE EVTTIME BETWEEN ROW.FractionStart AND ROW.FractionEnd AND EVTAREA = ROW.Equipment); 
FOR NEXT; 

RETURN MYTABLE; 

私はカーソルを見てきたが、私はループ内でそれらの行を追加する方法を考え出したていません。正しい機能を見ていますか?またはこれを解決する良い方法がありますか?

答えて

0

これを試すことができますか?

INSERT INTO MYTABLE 
(
SELECT * FROM EVENTTABLE te, 
(
SELECT Equipment, MIN(TIME) as FractionStart, MAX(TIME) as FractionEnd 
FROM DATA 
WHERE ID = 1 
GROUP BY (Equipment) 
) td 
WHERE te.EVTTIME BETWEEN td.FractionStart AND td.FractionEnd AND te.EVTAREA = td.Equipment 
); 
+0

ありがとうございます!それはとてもシンプルだったので、私はそれがどのように機能するのか分かりません。 (where句はDATAテーブルの結果の各行に対してどのように呼び出されますか)。それはトリックを行うように見えます。 – user2536967

+0

FRACTIONSのselectカーソルは、代わりに副選択によって表されます(言い換えれば、メモリ内のテーブルになります)。次にwhere条件によってイベントテーブルに結合されます。インサートの外側で実行して、何をしているのかを見ることができます。 –

関連する問題