0

INSERT ステートメントを使用して、テーブル STATISTICS にデータを追加したいと考えています。

また、新しいデータが入ってくると、新しいカウントを古いカウントに移動し、新しい日付を古い日付に移動したいと考えています。

OracleにSETを使用したINSERT INTOテーブルのようなものがあるかどうかわからないので、これはちょっと難しいところです。

INSERT INTO STATISTICS
SET 
    MODEL = '&MY_MODEL',
    NEW_COUNT = 
    (
        SELECT COUNT(*)
        FROM TABLE CLIENTS
    ),
    NEW_DATE = SYSDATE,
    OLD_COUNT = NEW_COUNT,
    OLD_DATE = NEW_DATE,
    PRNCT_CHANGE =  ((NEW_COUNT) - (OLD_COUNT)) / (NEW_COUNT)*100
);

Oracleでこれを達成するにはどうすればよいですか?

4

2 に答える 2

1

これにより、統計がアップサートされ、新しい統計が追加されます。MODEL の一意のキーを想定しています。そうでない場合は、アンジェリーナが言ったように挿入を行い、単一の MODEL エントリの最新の行のみを取得する必要があります。

MERGE INTO STATISTICS tgt
using (SELECT '&MY_MODEL' AS MODEL,
              (SELECT COUNT(*) FROM CLIENTS) AS NEW_COUNT,
              SYSDATE AS DATE_COUNT,
              NULL AS OLD_COUNT,
              NULL OLD_DATE,
              NULL AS PRCNT_CHANGE
         FROM DUAL) src
   on (TGT.MODEL = SRC.MODEL)
WHEN MATCHED THEN UPDATE 
     SET TGT.NEW_COUNT = SRC.NEW_COUNT,
         TGT.NEW_DATE  = SRC.NEW_DATE,
         TGT.OLD_COUNT = TGT.NEW_COUNT,
         TGT.OLD_DATE  = TGT.NEW_DATE,
         TGT.PRCNT_CHG = 100 * (SRC.NEW_COUNT - TGT.NEW_COUNT) / (SRC.NEW_COUNT)
            -- NEEDS DIV0/NULL CHECKING
WHEN NOT MATCHED THEN INSERT
    (MODEL, NEW_COUNT, NEWDATE, OLD_COUNT, OLD_DATE, PRCNT_CHANGE)
  VALUES
    (src.MODEL, src.NEW_COUNT, src.NEWDATE, src.OLD_COUNT, src.OLD_DATE, src.PRCNT_CHANGE);
于 2013-07-17T03:25:09.327 に答える