0

私は2つのテーブルを持っています:

査定と査定_お知らせ

CREATE TABLE  "ASSESSMENT" 
  (     "ASSESSMENT_NAME" VARCHAR2(50) NOT NULL ENABLE, 
        "DEADLINE_DATE" DATE NOT NULL ENABLE, 
        CONSTRAINT "ASSESSMENT_PK" PRIMARY KEY ("ASSESSMENT_NAME") ENABLE
  )

CREATE TABLE  "ASSESSMENT_ANNOUNCEMENT" 
   (    "ASSESSMENT_NAME" VARCHAR2(50) NOT NULL ENABLE, 
        "DEADLINE_DATE" DATE NOT NULL ENABLE, 
        "ATTENTION" VARCHAR2(500) NOT NULL ENABLE, 
  CONSTRAINT "ASSESSMENT_ANNOUNCEMENT_PK" PRIMARY KEY ("ASSESSMENT_NAME")  ENABLE
   )

ASSESSMENT テーブルの DEADLINE_DATE 列の日付が 7 日以内の場合に「ASSESSMENT_ANNOUNCEMENT」テーブルを更新するトリガーの実装を検討しています。データは 14 日間保存された可能性がありますが、期限から 7 日以内になるとトリガーされます。挿入日が締め切りの 7 日以内でない限り、これは挿入時にトリガーされません。

これまでのところ、次のコードがあります。

CREATE OR REPLACE TRIGGER  "TEST" 
AFTER INSERT ON ASSESSMENT
FOR EACH ROW
BEGIN
insert into ASSESSMENT_ANNOUNCEMENT(ASSESSMENT_NAME, DEADLINE_DATE, ATTENTION)
values (:new.ASSESSMENT_NAME, :new.DEADLINE_DATE, 'DEADLINE IS 7 DAYS OR LESS');
WHERE DEADLINE_DATE >= (SYSDATE) - 7

ヘルプとガイダンスをいただければ幸いです。

ありがとう!

4

2 に答える 2

0

欲しいらしい

BEGIN
  IF :new.deadline_date >= sysdate + 7
  THEN
    INSERT INTO assessment_announcement( assessment_name, deadline_date, attention )
      VALUES( :new.assessment_name, :new.deadline_date, 'Deadline is 7 days or less' );
  END IF;
END;

OracleDATEには、常に日コンポーネントと時間コンポーネントが含まれていることに注意してください。したがって、sysdate + 7正確に 24*7 = 168 時間前が返されます。現在 2 月 26 日の午後 4:00 である場合、3 月 5 日の午後 4:00 が返さassessment_announcementdeadline_dateますtrunc(sysdate) + 7

于 2013-02-26T21:01:31.017 に答える
0

必要な時間枠内にテーブルが更新されるという保証がないため、トリガーで目的を達成できるとは思いません。代わりに、適切な間隔でスケジュールできるストアド プロシージャを実行してこれを行う必要があります。毎日または12時間ごとに言ってください。私はこれを oracle ではなく MSSQL で行いましたが、この記事はあなたがその道を歩み始めるのに役立つはずです。

スケジュールする PL-SQL BLock は、上記のクエリです。あなたはそれを変更することができます

insert into ASSESSMENT_ANNOUNCEMENT(ASSESSMENT_NAME, DEADLINE_DATE, ATTENTION)
Select ASSESSMENT_NAME, DEADLINE_DATE, 'Deadline is 7 days or less'
FROM ASSESSMENT
WHERE DEADLINE_DATE >= (SYSDATE) - 7
于 2013-03-27T18:36:17.070 に答える