根据另一列的计算在列上设置DEFAULT值

时间:2014-05-09 16:17:47

标签: sql date set default

编辑:我正在使用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工作表。

1 个答案:

答案 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天。