我是oracle表格的新手触发器,我正在制作一个纳税人表格,其中我已经制作了以下字段:
Tax_Code| From_Date | To_Date
现在我想制作一个触发器,它应该检查现在输入的日期是否介于之前输入的日期之间。
例如,如果有条目
001 | 01-JUL-2013 | 30-JUN-2014
那么没有人能够在这些先前输入的日期之间写下任何日期。
答案 0 :(得分:0)
你需要结合几个不同的触发器才能做到这一点......
在POST-RECORD触发器内部,您需要添加对内置“post”的调用以将新的/更新的记录发送到数据库
创建一个WHEN-VALIDATE-RECORD触发器,用以下内容查询数据库:
declare
cursor date_check_cur is
select tax_code, start_date, end_date
from tax_code_table t
where :block.start_date between t.start_date and t.end_date
or :block.end_date between t.start_date and t.end date;
v_dates date_check_cur%rowtype;
begin
open date_check_cur;
fetch date_check_cur into v_dates;
if date_check_cur%found then
null; -- Display some kind of error to the user that entered dates conflict with returned date range...
end if;
close date_check_cur;
end;
对此解决方案的警告是,您现在需要非常小心事务状态,因为您已将(但未提交)数据写入数据库。该解决方案也没有考虑两个用户从两个不同屏幕输入日期的可能性。这将需要更复杂的数据库级触发器......
或者,您可以在PRE-INSERT和PRE-UPDATE触发器中执行强制执行(使用上面引用的相同查询),这些触发器在将记录发布到数据库之前不会触发,但这会导致进入一堆破碎的数据需要逐行修复....