如何使用oracle表单中的触发器将当前日期与上一个日期进行比较?

时间:2013-08-12 08:54:31

标签: oracle triggers oracleforms

我是oracle表格的新手触发器,我正在制作一个纳税人表格,其中我已经制作了以下字段:

Tax_Code| From_Date | To_Date

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

例如,如果有条目

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

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

1 个答案:

答案 0 :(得分: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;
    
  3. 对此解决方案的警告是,您现在需要非常小心事务状态,因为您已将(但未提交)数据写入数据库。该解决方案也没有考虑两个用户从两个不同屏幕输入日期的可能性。这将需要更复杂的数据库级触发器......

    或者,您可以在PRE-INSERT和PRE-UPDATE触发器中执行强制执行(使用上面引用的相同查询),这些触发器在将记录发布到数据库之前不会触发,但这会导致进入一堆破碎的数据需要逐行修复....