【问题标题】:Set DEFAULT value on a column, based on the compute of another column根据另一列的计算在列上设置 DEFAULT 值
【发布时间】:2014-06-27 11:30:39
【问题描述】:

编辑:我正在使用 SQL-Oracle 数据库 10g 我需要根据另一列 DATE 列(loan_date)设置一列 DATE 值(loan_due)。

问题是,“loan_due”必须正好是“loan_date”的下一个月,DAY 必须是 5。

示例:

IF loan_date IS '12/06/14',loan_due 必须是 '05/07/14'(这必须发生,就在我插入loan_Date)

如果loan_date 是'01/09/14',则还款loan_due 必须是'05/10/14'

我认为 TRIGGER 可能会有所帮助,但是当我尝试时,我只会收到“Mutating table”错误。因为触发器尝试对正在工作的表进行 DML。

【问题讨论】:

  • 答案取决于您没有提供的数据库引擎。
  • 哦.. s**t。抱歉,这是我的第一天。

标签: sql date set default


【解决方案1】:

如果您需要在要插入或更新的同一行上设置列,则可以使用 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 天。

【讨论】:

  • 我已经评论了我自己的答案,因为我不知道如何写一个较小的评论,我想......有点“引用”你,我不知道我是否可以在这里做到这一点。我很尴尬。
  • 我给出的示例适用于 MySQL,而不是 Oracle。对于 Oracle,您需要使用 PL/SQL 赋值运算符和不同的表达式进行不同的赋值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
相关资源
最近更新 更多