2015-03-19 3 views
0

Я только начал использовать PostgreSQL и сомневался. Я создал таблицуАвтоматическое обновление значения в таблице

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

.

Я хочу, чтобы Due_Date был 30 + Issue_Date. Как я должен это делать?

+0

Да, Ваш ответ работал. Спасибо большое :) – John

ответ

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_date является стоимость вашего Issue_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 уже ответил об этом

увидеть разработанный триггер на вопрос ФПА в

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') 
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 
]; 
+0

Должен ли я сделать один из тех или обоих? – John

+0

Недействительно для Postgres –

Смежные вопросы