2014-01-16 9 views
0
나는 새로운 주 값이 '발행'으로 발행 할 때 date_end date_new date -1로 변경할
CREATE OR REPLACE TRIGGER shares_to_amount 
AFTER INSERT OR UPDATE OF issued ON shares_amount 
FOR EACH ROW 
BEGIN 
    INSERT INTO shares_amount(
    share_issue_id, 
    share_id, 
    issued, 
    date_start, 
    date_end 
) VALUES ( 
    :OLD.share_issue_id, 
    :OLD.share_id, 
    :NEW.issued, 
    :NEW.date_start, 
    :((NEW.date_start)-1).date_end 
    ); 
END; 

을 변경합니다. 시작 날짜는 오늘 날짜 일 수 있지만 종료 날짜는 그 전날을 표시해야합니다.SQL 오라클 트리거 날짜

답변

0

돌연변이 문제 때문에 모든 트리거가 작동하지 않습니다. 행 레벨 트리거에서 DML을 트리거하여 변경중인 테이블을 다시 실행할 수 없습니다 (트리거가 자치적이지 않지만 위험한 경우 및 예외적 인 경우). 귀하의 질문을 바로 이해하는 경우 귀하는 주식에 대한 변경 내역을 보관하고자합니다. 가장 좋은 방법은 PL/SQL 패키지를 작성하고 프로 시저에 로직을 캡슐화하고 최종 사용자 또는 다른 프로그램에이 인터페이스를 제공하는 것입니다.

+0

새로운 값을 발행 할 때 date_end를 New date_start -1로 대체 할 트리거를 만들고 싶습니다. – user3202908

+0

>> date_end를 New_ date_start -1로 대체합니다. - OK, WHOW ROW? 당신의 방아쇠를 보면서 당신은 같은 테이블에 새로운 레코드를 추가하려고하고 있다고 생각합니다. 이것은 트리거를 사용하여 불가능합니다. 기술적 관점이 아닌 비즈니스 관점에서 요구 사항을 명확하게 설명해 주시겠습니까? –

+0

나는 shares_amount 테이블을 가지고있다. 그것은 회사에서 발행 한 데이터 공유, ID, 시작 날짜 및 종료 날짜 등을 포함합니다. 원하는 것은이 테이블에 삽입되기 전에 shares_amount 테이블을 업데이트하는 트리거를 작성하여 회사가 새 금액을 선언 할 때 현재 사용 가능한 공유의 경우, 현재 나열된 유효한 항목의 종료 날짜는 새 항목의 시작 날짜 전날로 설정됩니다. – user3202908