2013-02-26 3 views
0

에 업데이트 나는 두 개의 테이블이 있습니다오라클 SQL 트리거 날짜

평가 및 Assessment_Announcement

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_ANNOUNCEMENT'테이블에 업데이트 트리거를 구현에서 찾고을 때 DEADLINE_DATE의 날짜 ASSESSMENT 테이블의 열은 7 일 내에 있습니다. 데이터는 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 

어떤 도움과지도가 크게 감상 할 수있다 :

지금까지 나는 다음과 같은 코드가 있습니다!

감사합니다. 당신이 오라클 DATE 항상 하루 구성 요소 및 시간 구성 요소를 포함

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; 

참고 원하는처럼

+0

기존 코드에 어떤 문제가 있습니까? –

답변

0

는 소리가 난다. 따라서 sysdate + 7은 정확히 24 * 7 = 168 시간 전에 반환합니다. 현재 2 월 26 일 오후 4 시가되면 3 월 5 일 오후 4시에 반환됩니다. deadline_date이 3 월 5 일 언제든지 assessment_announcement에 행을 삽입하도록하려면 trunc(sysdate) + 7이 필요합니다.

+0

안녕 얘들 아! 지금까지의 도움은 훌륭하고 작동하도록 코드를 작성하는 방법을 찾고 있습니다! :) 1 점 - 평가 마감일이 한 달 전에 입력되어서 날짜가 7 일 만에 마감되기 때문에 업데이트를 트리거해야하는 경우 - 이것이 진정한 방아쇠가 아닌가? 사용자가 기한에서 7 일을 삽입하지 않기 때문에 -하지만 여전히 트리거를 찾고 있습니까? 다른 방법으로 업데이트 할 수 없습니다. 혼란스러워서 죄송합니다. 그리고 다시 한 번 감사드립니다! – user2112730

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