Sql 基于对另一列的计算,设置该列的默认值

Sql 基于对另一列的计算,设置该列的默认值,sql,date,set,default,Sql,Date,Set,Default,编辑:我正在使用SQL Oracle数据库10g 我需要根据另一个日期列(loan_DATE)设置一个列的日期值(loan_due) 问题是,“贷款到期日”必须正好是“贷款日期”的下一个月,日期必须是5日。 例如: 如果贷款日期为“12/06/14”,则到期贷款必须为“05/07/14”(必须在我插入贷款日期后立即发生) 如果贷款日期为2014年9月1日,则到期贷款必须为2014年10月5日 我认为触发器可能会有所帮助,但当我尝试时,我只会得到“变异表”错误。。因为触发器尝试DML正在工作的表。

编辑:我正在使用SQL Oracle数据库10g 我需要根据另一个日期列(loan_DATE)设置一个列的日期值(loan_due)

问题是,“贷款到期日”必须正好是“贷款日期”的下一个月,日期必须是5日。

例如:

如果贷款日期为“12/06/14”,则到期贷款必须为“05/07/14”(必须在我插入贷款日期后立即发生)

如果贷款日期为2014年9月1日,则到期贷款必须为2014年10月5日


我认为触发器可能会有所帮助,但当我尝试时,我只会得到“变异表”错误。。因为触发器尝试DML正在工作的表。

如果需要在正在插入或更新的同一行上设置列,则可以使用插入前或更新前触发器

在触发器主体中,对于MySQL您只需执行以下操作:

 SET NEW.loan_due = LAST_DAY(NEW.loan_date) + INTERVAL 5 DAY;
触发触发器后,当语句继续执行时,
loan\u due
列将具有触发器中设置的值,插入或更新将使用该值继续进行

对于Oracle,情况大致相同。在每行插入之前的
触发器主体中,为列指定一个值。PL/SQL中的赋值语法不同:

NEW.loan_due := expr ; 

其中,
expr
是一个表达式,返回一个月的第5天,在
NEW.loan\u date
之后。答案取决于您没有提供的数据库引擎。哦。。s**t。对不起,这是我的第一天。我已经对自己的答案发表了评论,因为我不知道如何写一个较小的答案,我想。。有点“引用”你的话,我不知道我在这里是否能做到。我很尴尬,我举的例子是MySQL,而不是Oracle。对于Oracle,您需要使用PL/SQL赋值运算符和不同的表达式以不同的方式进行赋值。