SQL TRIGGER - 在简单的囚犯模型中重叠日期

时间:2016-06-20 22:23:52

标签: oracle triggers overlapping

我有一个简单的问题,但我对SQL很新。 我有一个简单的监狱和囚犯模型,我需要触发器,这将提供我的日期不会重叠。

表(执行句子)有3个属性: 1.句子的执行ID(" ID_exec") 2.来自("来自") 3.到("到")

我需要确定囚犯的一句话不会与他的另一句话重叠。 例如 - 他将被判刑(2011年8月1日 - 2031年8月1日),新判决不应该与此日期重叠。

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我认为您的prisonerID表格中还需要sentence

create table sentence
( id number,
  prisonerID number,
  fromDate date,
  toDate date); 
没有它,很难确定你处理哪个囚犯的判决。 拒绝的标准是:

:NEW.toDate > fromDate AND
:NEW.FromDate < toDate

如果按上述标准返回某些记录 - 应拒绝插入。标准来自要求开始时间或结束时间不能在现有时间段内,并且它们不能包括这样的时期。打破这个部分 - 新的fromDate必须比旧的ToDate更快,而新的toDate必须晚于fromDate。

  create or replace trigger sentence_reject_existing
  before insert 
  on sentence
  for each row 
  declare
   vCount NUMBER;
   begin
     select count(*)
      into vCount
     from sentence 
     where prisonerID = :NEW.prisonerID and
           :NEW.Todate > fromDate    and
           :New.FromDate < toDate   ;

     if vCount > 0 then
        raise_application_error(-20005,'Prisoner is already in prison');
     end if;

   end;