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但它不起作用。它甚至没有显示任何错误。它能是什么?
答案 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;