自动更新表中的值

时间:2015-03-19 05:05:57

标签: database postgresql

我刚开始使用PostgreSQL并且有疑问。我创建了一个表

CREATE TABLE B2S(
                 StudentID INTEGER 
                ,Book_Issued VARCHAR(20)
                ,Issue_Date DATE
                ,Due_Date DATE
                )

我希望Due_Date为30 + Issue_Date。我该怎么做?

2 个答案:

答案 0 :(得分:0)

您有3个选项可以执行此操作

  • 选项 - 1

您可以使用Date/Time Operators

例如,您的Issue_Date为2015-03-19,则Due_Date应为2015-04-19,因此您可以在插入语句中使用'2015-03-18'::date + interval '30' DAY

 insert into B2S values (1,'Yes','2015-03-18','2015-03-18'::date + interval '30' DAY)

  • 选项2

或者您可以创建如下所示的函数,此处argIssue_dateIssue_Date日期的值,函数将返回Due_Date

create or replace function fn_get_due_date(argIssue_date date) returns date
as
$$
select (argIssue_date::date +  interval '30' DAY)::date 
$$
language sql

并在插入语句中调用此函数

insert into B2S values (1,'Yes','2015-03-18',fn_get_due_date('2015-03-18'))

  • 选项3

通过创建触发器,@ Daniel Sagayaraj已经回答了这个问题

请参阅OP问题的详细说明

CREATE OR REPLACE FUNCTION tgr_due_date() RETURNS trigger AS '
BEGIN
 NEW.Due_Date := NEW.Issue_Date::date +  interval ''30'' DAY;
RETURN NEW;
END;
' LANGUAGE plpgsql;

将创建的触发器tgr_due_date分配给表B2S

CREATE TRIGGER due_date_insert 
BEFORE INSERT OR UPDATE ON B2S 
FOR EACH ROW 
EXECUTE PROCEDURE tgr_due_date();

最后是插入语句

insert into B2S (StudentID,Book_Issued,Issue_Date) values (1,'Yes','2015-05-18')

答案 1 :(得分:0)

如果要在插入新记录时自动更新Due_Date,可以在sql中使用触发器。

示例:

CREATE or REPLACE TRIGGER trg1
    AFTER
    INSERT ON emp1
    FOR EACH ROW
BEGIN
    [logic goes here]
END;

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
[
  Trigger logic goes here
];