1

我是 oracle 表单和触发器的新手,我正在制作纳税人表单,其中包含以下字段:

Tax_Code| From_Date | To_Date

现在我想创建一个触发器,它应该检查现在输入的日期是否位于之前输入的日期之间。

例如,如果有一个条目

001 | 01-JUL-2013 | 30-JUN-2014 

那么没有人应该能够在这些先前输入的日期之间写入任何日期。

4

1 回答 1

0

你需要结合几个不同的触发器来做到这一点......

  1. 在 POST-RECORD 触发器中,您需要添加对内置“post”的调用以将新/更新的记录发送到数据库

  2. 创建一个 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 触发器中执行强制执行(使用上面引用的相同查询),在记录发布到数据库之前不会触发,但这会带来输入一堆损坏的风险需要逐行修复的数据....

于 2013-10-01T20:46:57.157 回答