将默认日期设置为距插入日期1年

时间:2017-11-17 17:34:16

标签: sql oracle

我目前有一张包含以下布局的表格:

create table x (
   insert_date date DEFAULT sysdate,
   last_update_date date,
   expiration_date date
)

如果我写这个表,insert_date的值显然是它写入的确切时间。我的问题是,有没有办法为expiration_date设置一个默认值,即字面上只是" sysdate + 1年" ?

2 个答案:

答案 0 :(得分:2)

您可以使用ADD_MONTHS功能。

示例:

create table x2 (
   insert_date date DEFAULT sysdate,
   LAST_UPDATE_DATE date,
   EXPIRATION_DATE date DEFAULT add_months(sysdate, 12)
);

insert into x2 (LAST_UPDATE_DATE) values (TO_DATE('2017-11-17', 'YYYY-MM-DD'));
commit;

以下是使用触发器的示例。

create or replace trigger x2_TX 
    before insert on x2 for each row
begin
   :new.EXPIRATION_DATE := ADD_MONTHS(sysdate, 12);
end;

Stilgar有一个很好的观点,我的第一个例子不是"开发者安全"相对于第二个。为了简单起见,我会建议前者,现在我会做你团队中最好的做法。

答案 1 :(得分:1)

如果是DEFAULT SYSDATE,您可以编写BEFORE INSERT TRIGGER代替null来获取已通过的日期值或执行日期。

SET DEFINE OFF
CREATE OR REPLACE TRIGGER tr_x BEFORE  INSERT ON x
FOR EACH ROW
BEGIN
:new.insert_date := NVL(:new.insert_date,SYSDATE);
:new.expiration_date := :new.insert_date + INTERVAL '1' YEAR;
END;
/