2017-07-31 10 views
0

私はOracleにとってかなり新しいです。Oracleでのテンポラリテーブルの使用方法または作成方法

私は次のロジックを達成しようとするとちょっと立ち往生しています。私は、レポートを生成するのに役立つOracleのSQLスクリプトを作成しています。このスクリプトは1日2回実行されるので、次回の実行時に同じファイルを選ぶべきではありません。

1)クエリを実行して、結果セットを保存し、ジョブが@ 11 Am で実行されるときに注文IDを一時テーブルに格納します。2)クエリを2時間ごとに実行します。@ 3 pm一時テーブルをチェックして、一時テーブルではありません。

次のクエリでは結果セットが生成されますが、一時テーブルの作成方法と実行時の有効性は不明です。

select 
     rownum as LineNum, 
     'New' as ActionCode, 
     ORDER_ID, 
     AmountType, 
     trun(sysdate), 
     trun(systime) 
     from crd.V_IVZ_T19 t19 
where 
    (t19.acct_cd in 
     (select fc.child_acct_cd 
      from cs_config fc 
     where fc.parent_acct ike 'G_TRI_RPT')) 

and t19.date>= trunc(sysdate) 
and t19.date<= trunc(sysdate); 

ご迷惑をおかけして申し訳ありません。タイムスタンプだけを取得する方法もわかりません。

+0

日付のチェックは、範囲を確認するように見えますが、単にt19.dateが現在の日付であることを確認します。 – BriteSponge

+3

セッションが切断されると一時テーブルのデータが削除されるため、Tempテーブルの通常のテーブル場所を作成することができます。通常のテーブルでは、結果を保存して翌日のプロセスの前に、テーブルを切り捨てて、再び – XING

+0

@ BriteSponge、t19.dateをビューのOrderdateにします。 – Usher

答えて

1

TEMPテーブルはここでは考えられません。なぜなら、一時テーブルのデータは(セッションのためだけに)長期間データを保存しないため、通常のテーブルを作成する必要があります。それはあなたを助けることを願っています:

--- table for storing ORDER_ID for further checking, make a correct DataType, you also can add date period in the table to control expired order_ids'; 

CREATE TABLE order_id_store (
     order_id NUMBER, 
     end_date DATE 
); 


--- filling the table for further checking 
INSERT INTO order_id_store 
     SELECT ORDER_ID, trunc(sysdate) 
       FROM crd.V_IVZ_T19 t19 
       WHERE t19.order_id NOT IN (SELECT DISTINCT order_id FROM order_id_store) 
       AND t19.date>= trunc(sysdate) 
       AND t19.date<= trunc(sysdate); 

--- delete no need data by date period, for example for last 2 days: 
DELETE FROM order_id_store WHERE end_date <= trunc(SYSDATE - 2); 
COMMIT; 

---- for select report without already existed data 
SELECT 
     rownum as LineNum, 
     'New' as ActionCode, 
     ORDER_ID, 
     AmountType, 
     trun(sysdate), 
     trun(systime) 
FROM crd.V_IVZ_T19 t19 
WHERE 
    (t19.acct_cd in 
     (select fc.child_acct_cd 
      from cs_config fc 
     where fc.parent_acct ike 'G_TRI_RPT')) 
    AND t19.order_id NOT IN (SELECT DISTINCT order_id FROM order_id_store) 
    AND t19.date>= trunc(sysdate) 
    AND t19.date<= trunc(sysdate); 

私は、近い期間が取って起こしそうでない場合には、正しい行い、あなたの「t19.date> =」と「t19.date < =」についてはよく分かりません。

関連する問題