我有桌子:
BOOK_DT1 BOOK_DT2 USERNAME
--------- --------- --------------------
22-SEP-17 12-OCT-17 rSK
08-FEB-16 18-FEB-16 chak
05-JAN-17 12-JAN-17 rah
31-JAN-16 01-JUL-16 ABC
插入另一列时,应该检查BOOK_DT1的给定日期,BOOK_DT2不应该进入表格中的日期。
对于EX:insert into table_name('28-SEP-17','12-NOV-17','XYX');
应该抛出错误,因为' 28-SEP-17'介于22-SEP-17和12-OCT-17之间。
答案 0 :(得分:0)
您可以使用after insert
触发器来实现此目的。像这样闷闷不乐:
create or replace trigger date_check_trg
after insert
on your_table_name
v_cnt NUMBER;
begin
select count(*)
into v_cnt
from you_table_name t1
join you_table_name t2
on ( t1.BOOK_DT1 between t2.BOOK_DT1 and t2.BOOK_DT1
or t1.BOOK_DT2 between t2.BOOK_DT1 and t2.BOOK_DT1
)
AND t1.rowid != t2.rowid
;
if v_cnt > 0 then
raise_application_error(-20999, 'intersection error');
end if;
end;
/
答案 1 :(得分:0)
如果您想在插入之前进行检查,那么BEFORE INSERT
应该是您正在寻找的内容。如果名称没有关系,并且您的新值不应该介于之前插入表中的任何值之间,那么我就是这样写的:
create or replace trigger trg_date_chk
before insert
on your_table_name for each row
declare
lnCnt NUMBER;
begin
select count(*)
into lnCnt
from you_table_name a
where :new.BOOK_DT1 < a.BOOK_DT1
and :new.BOOK_DT2 > a.BOOK_DT2;
if lnCnt > 0 then
raise_application_error(-20999, 'INSERT ERROR HERE');
end if;
end;
/