我有一个简单的问题,但我对SQL很新。 我有一个简单的监狱和囚犯模型,我需要触发器,这将提供我的日期不会重叠。
表(执行句子)有3个属性: 1.句子的执行ID(" ID_exec") 2.来自("来自") 3.到("到")
我需要确定囚犯的一句话不会与他的另一句话重叠。 例如 - 他将被判刑(2011年8月1日 - 2031年8月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;