1

テーブル内のすべてのデータを取得して、測定日(フィールド)が14か月より前のテーブルCOURBE_CHARGEにコピーし、コピーされたデータを削除するスクリプトを実行したいと思います。HISTORIQUE_COURBE_CHARGECCH_DATE

COURBE_CHARGEHISTORIQUE_COURBE_CHARGE同じテーブルです

COURBE_CHARGE:

Column                Data Type

CCH_ID                  NUMBER(*,0)
TLM_ID                  NUMBER(*,0)
CPT_ID                  NUMBER(*,0)
CCH_DATE                    DATE
CCH_DATE_INTEGRATION    DATE
CCH_NEW                 NUMBER(*,0)
CCH_NB_HEURES           NUMBER(*,0)
CCH_TYPE_ENERGIE            VARCHAR2(12)
P1                          NUMBER(*,0)
P2                          NUMBER(*,0)
P3                          NUMBER(*,0)
…                           NUMBER(*,0)
P149                    NUMBER(*,0)
P150                    NUMBER(*,0)
PH1                         NUMBER(*,0)
PH2                         NUMBER(*,0)
…                           NUMBER(*,0)
PH24                    NUMBER(*,0)
PH25                    NUMBER(*,0)

HISTORIQUE_COURBE_CHARGE:

Column                Data Type

HIS_CCH_ID                  NUMBER(*,0)
TLM_ID                  NUMBER(*,0)
CPT_ID                  NUMBER(*,0)
CCH_DATE                    DATE
CCH_DATE_INTEGRATION    DATE
CCH_NEW                 NUMBER(*,0)
CCH_NB_HEURES           NUMBER(*,0)
CCH_TYPE_ENERGIE            VARCHAR2(12)
P1                          NUMBER(*,0)
P2                          NUMBER(*,0)
P3                          NUMBER(*,0)
…                           NUMBER(*,0)
P149                    NUMBER(*,0)
P150                    NUMBER(*,0)
PH1                         NUMBER(*,0)
PH2                         NUMBER(*,0)
…                           NUMBER(*,0)
PH24                    NUMBER(*,0)
PH25                    NUMBER(*,0)

スクリプトを実行するとエラーが発生します

エラー

ありがとう。

4

2 に答える 2

2
INSERT INTO HISTORIQUE_COURBE_CHARGE (CCH_DATE, [field list]) 
    AS 
      SELECT SYSDATE, [field list] 
        FROM COURBE_CHARGE
       WHERE CH_DATE < (SYSDATE - 425);

[フィールド リスト] は、テーブルの完全なフィールド リストに展開する必要があります。(例: P1、P2、P3...) CH_DATE なし

where cond: 14 か月はおよそ 425 日です。ちょうど 14 か月が必要な場合は、条件を調整してください。

編集: ch_date は履歴テーブルの SYSDATE に設定されることに注意してください。これは、アーカイブが実際にいつ行われたかを追跡する必要がある場合、状況に応じて正しいか間違っている可能性があります (ただし、新しい日付列を追加することをお勧めします) HIST_DATE を作成し、それを使用して SYSDATE を格納します)。そのシナリオでは、挿入は次のようになります。

ALTER TABLE HISTORIQUE_COURBE_CHARGE ( ADD HIST_DATE DATE ); -- これを 1 回だけ実行します

INSERT INTO HISTORIQUE_COURBE_CHARGE (HIST_DATE, [field list]) 
        AS 
          SELECT SYSDATE, [field list] 
            FROM COURBE_CHARGE
           WHERE ... -- whatever where cond

この場合、[フィールド リスト] はテーブルのフィールド リスト全体です。同様に、他の情報 (ストーリー化を実行するユーザーなど) を保存することもできます。

削除の場合:

DELETE 
  FROM COURBE_CHARGE 
 WHERE CC_ID IN (SELECT HIS_CC_ID 
                   FROM HISTORIQUE_COURBE_CHARGE );

これにより、保存された各行が削除されます。

于 2012-06-29T13:17:11.277 に答える
0
INSERT INTO HISTORIQUE_COURBE_CHARGE
  SELECT * FROM COURBE_CHARGE
  WHERE CCH_DATE < DATEADD(MONTH, -14, SYSDATE)
于 2012-06-29T13:20:00.000 に答える