1

我想做一个脚本来检索表中的所有数据,COURBE_CHARGE以将它们复制到HISTORIQUE_COURBE_CHARGE测量日期(字段CCH_DATE)早于 14 个月的表中,并删除复制的数据。

COURBE_CHARGE并且HISTORIQUE_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(添加 HIST_DATE 日期);-- 只执行一次

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

在这种情况下,[field list] 是表的整个字段列表。同样,您可以存储其他信息(例如执行故事化的用户等)。

对于删除:

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 回答