我有两张桌子:
评估和评估_公告
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
非常感谢任何帮助和指导!
谢谢!
答案 0 :(得分: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;
请注意,Oracle DATE
始终包含日期组件和时间组件。所以sysdate + 7
确切地返回24 * 7 = 168小时前。如果它当前是2月26日下午4:00,它将在3月5日下午4:00返回。如果assessment_announcement
如果deadline_date
是3月的任何时间,您希望触发器在trunc(sysdate) + 7
中插入一行5,你需要{{1}}。
答案 1 :(得分:0)
我不相信你可以用触发器完成你想要的东西,因为你不能保证在你想要的时间范围内更新表。相反,您应该寻找运行存储过程来执行此操作,可以在适当的时间间隔进行调度;每天或每12小时说一次。我用MSSQL而不是oracle做过这个,但这个article应该可以帮助你开始上路。
您要安排的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