2015-12-29 7 views
3

Я работаю над библиотечной базой данных и содержит таблицу book_transaction. Есть 2 столбца под названием issued_date и due_date. due_date должно быть 7 дней с issued_date. Могу ли я указать это условие, используя ключевое слово default при создании таблицы?Обновление значения столбца на основе другого значения столбца

Если это невозможно, оставьте альтернативу для этого же.

Спасибо,

+1

Вы можете использовать вычисленный столбец для этой цели – fabulaspb

+0

Спасибо, я получил его сейчас. –

ответ

2

Благодарим Вас за использование полный комментарий по «fabulaspb». Я придумал это

create table book_transaction 
(
    transaction_number int primary key, 
    book_isbn   int REFERENCES book_master(book_isbn), 
    student_code  int references student_master(student_code), 
    issued_date  date default sysdate, 
    due_date   date as (issued_date+7), 
    submited_date  date, 
    fine    int 
); 

Таблица создана без ошибок и хороша. Спасибо вам всем.

+0

Да, это более разумный способ сделать это. –

+0

Просто примечание, column due_date - это виртуальный столбец, I.e. вы не можете изменить значение, оно ВСЕГДА выпущено_дайте + 7 –

+0

ОК. Спасибо за хедз-ап. –

4

Oracle default ограничения не могут ссылаться на другие столбцы. Вы можете получить ту же функциональность с помощью триггера (см this answer):

CREATE TRIGGER book_transaction_trigger 
    BEFORE INSERT ON book_transaction 
    FOR EACH ROW 
BEGIN 
    IF :new.due_date IS NULL THEN 
    :new.due_date := :new.issued_date + 7; 
    END IF; 
END book_transaction_trigger; 

Вы можете добавить дней, добавляя число к date.

+0

OK Я знаю, что, но могу ли я это сделать без использования триггеров или процедур? –

3

Вы можете создать триггер для таблицы ..

CREATE TRIGGER test_trigger BEFORE INSERT ON `book_transaction` 
FOR EACH ROW SET NEW.issued_date = IFNULL(NEW.entryDate,NOW()), 
NEW.due_date = TIMESTAMPADD(DAY,7,NEW.issued_date)