根据另一个列值更新列值

时间:2015-12-29 10:16:59

标签: sql oracle

我正在使用图书馆数据库,它包含一个名为book_transaction的表格。 有两列名为issued_datedue_datedue_date应距离issued_date 7天。我可以在创建表时使用default关键字指定此条件吗?

如果不可能,请为此选择替代方案。

谢谢,

3 个答案:

答案 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添加号码来添加天数。

答案 1 :(得分: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)

答案 2 :(得分: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
);

创建表时没有错误,表现正常。 感谢你所做的一切。