编辑:我正在使用SQL-Oracle数据库10g 我需要根据另一个DATE列(loan_date)设置一个列DATE值(loan_due)。
问题是,“loan_due”必须恰好是“loan_date”的下个月,而DAY必须是5。
示例:
如果loan_date IS' 12/06/14 ',则loan_due必须' 05/07/14 '(这必须在紧随其后我插入loan_Date)
如果loan_date IS' 01/09/14 ',则loan_due必须' 05/10/14 '
我认为TRIGGER可以提供帮助,但是当我尝试时,我只会收到“Mutating table”错误..因为触发器会尝试使用DML工作表。
答案 0 :(得分:0)
如果您需要在INSERTed或UPDATEd的同一行上设置一个列,那么BEFORE INSERT或BEFORE UPDATE触发器就是最佳选择。
在触发器的主体中,对于 MySQL ,您只需执行以下操作:
SET NEW.loan_due = LAST_DAY(NEW.loan_date) + INTERVAL 5 DAY;
触发触发器后,当语句继续时,loan_due
列将具有在触发器中设置的值,INSERT或UPDATE将继续使用该值。
对于 Oracle ,它大致相同。在BEFORE INSERT FOR EACH ROW
触发器的正文中,为列指定值。 PL / SQL中的赋值语法不同:
NEW.loan_due := expr ;
expr
是一个表达式,在NEW.loan_date
之后返回该月的第5天。