触发以获取日期之间的差异

时间:2012-12-21 17:58:39

标签: sql oracle sqlplus

CREATE TRIGGER ci_insert
AFTER INSERT ON tb 
REFERENCING NEW AS nr
FOR EACH ROW
DECLARE
  date_from DATE;
  date_to   DATE;
  diff  NUMBER;
BEGIN
  SELECT DATE_FROM INTO date_from WHERE id = :nr.id;
  SELECT DATE_TO INTO date_to WHERE id = :nr.id;
  diff = date_to - date_from;
  UPDATE TB SET (diff) VALUES (diff) WHERE id = :nr.id;
END;

我使用sqlplus但它不起作用。它甚至没有显示任何错误。它能是什么?

3 个答案:

答案 0 :(得分:1)

错误很少。首先,每次选择都必须有FROM。其次,您将有关于变异表的运行时错误 - 您无法读取/写入在行级触发器中触发操作的同一个表。最后,您的UPDATE语法错误,看起来更像INSERT;更新语法为UPDATE table1 SET field1 = value1 WHERE ....

答案 1 :(得分:0)

CREATE TRIGGER ci_insert
AFTER INSERT ON tb 
REFERENCING NEW AS nr
FOR EACH ROW
DECLARE
  date_from DATE;
  date_to   DATE;
  diff  NUMBER;
BEGIN
  SELECT DATE_FROM INTO date_from from TB WHERE id = :nr.id;
  SELECT DATE_TO INTO date_to from TB WHERE id = :nr.id;
  diff = date_to - date_from;
  UPDATE TB SET (diff) VALUES (diff) WHERE id = :nr.id;
END;

答案 2 :(得分:0)

我认为您需要的就是这个 - 如果可能的话,我总是会尝试对现有表格进行查询。将表名替换为your_table ...:

   Begin
     Update emp_test
        Set empno = (Select trunc(sysdate)-to_date('20-DEC-2012') days_btwn From dual);
   End;
相关问题