私はPL/SQLの新機能です。 PL/SQLプロシージャを使用して 'PANEL_STATUS_2'という名前の2番目の表に要約しようとしている、初期表のデータが 'FLEX_PANEL_INSPECTIONS'という名前になっています。しかし、データの性質上、FLEX_PANEL_INSPECTIONSのデータを正しく要約するためにcase文を記述しなければなりませんでした。 I case文は私の知識の範囲内で(特にデータを注文したGROUP BY句に列を許可しませんので、したがって、2(名前は「PANEL_STATUS_1」)を埋めるために第三、中間テーブルを作成している - 私は時にエラーが出ます私はこれをしようとする)。私は中間テーブルにデータを格納したくないのです - それを一時的にする(すなわち、プロシージャが実行されている間だけ存在して、 'PANEL_STATUS_1'のデータが保持されないようにする)方法はありますか?プロシージャ内でビューを作成するか、中間テーブルの必要性を完全に取り除きますか?PL/SQLプロシージャ内にデータを一時的に格納する方法はありますか。
私のミスの任意のヘルプや批判/ PL/SQLの誤解をいただければ幸いです。ここで私が書いたコードです:
create or replace procedure PANEL_STATUS_PROCEDURE (panel_lot_id in number) as
begin
--Populate intermediate table with information about the status of the panels.
insert into PANEL_STATUS_1 (FLEX_LOT_ID, FLEX_PANEL_DMX, FLEX_PANEL_STATUS)
select FLEX_LOT_ID, FLEX_PANEL_DMX,
--Sum the status values of the 4 panel inspections. A panel passes if and only if this sum = 4.
case sum (FLEX_PANEL_STATUS)
when 4 then 1
else 0
end as new_panel_status
from FLEX_PANEL_INSPECTIONS
where FLEX_LOT_ID = panel_lot_id
group by FLEX_LOT_ID, FLEX_PANEL_DMX;
--Add information about the machine ID and the upload time to this table.
insert into PANEL_STATUS_2 (FLEX_LOT_ID, FLEX_PANEL_DMX, FLEX_PANEL_STATUS, MACHINE_ID, UPLOAD_TIME)
select distinct PANEL_STATUS_1.*, MACHINE_ID, UPLOAD_TIME
from PANEL_STATUS_1, FLEX_PANEL_INSPECTIONS
where (FLEX_PANEL_INSPECTIONS.FLEX_LOT_ID = PANEL_STATUS_1.FLEX_LOT_ID
and FLEX_PANEL_INSPECTIONS.FLEX_PANEL_DMX = PANEL_STATUS_1.FLEX_PANEL_DMX)
and FLEX_PANEL_INSPECTIONS.FLEX_LOT_ID = panel_lot_id;
end PANEL_STATUS_PROCEDURE;
/
ありがとう、これは私の質問に答えます。どの時点でコミット節が行を削除しますか? –
テーブルが 'コミット削除行'として定義されている場合、データはコミットによってクリアされます。すなわち、それはトランザクションの期間だけ持続する。それが 'on delete preserve rows'の場合、それはセッションの持続時間の間続きます。 –
あなたの編集 - 私はあなたがコードのポイントを誤解していると思う - 私はブールのパスまたは失敗(1または0)をもたらすパネルのいくつかの検査を持っています。すべての検査が値1で合格した場合にのみ、パネルのステータスに値1が割り当てられます。それ以外の場合はステータスに値0が割り当てられます。したがって、コードブロックにcase文が必要です:) –