【发布时间】:2013-10-05 19:36:03
【问题描述】:
我正在尝试为 Oracle 表创建触发器。以下是要求 我有两张桌子书,副本(书和副本有 1 到 n 的关系。每本书可以有 0 到 n 副本)
书桌:
CREATE TABLE Book
(
book_id INTEGER NOT NULL ,
isbn VARCHAR2 (20) NOT NULL,
publisher_id INTEGER NOT NULL ,
tittle VARCHAR2 (100) NOT NULL ,
cat_id INTEGER NOT NULL ,
no_of_copies INTEGER NOT NULL ,
....
CONSTRAINT isbn_unique UNIQUE (isbn),
CONSTRAINT shelf_letter_unique UNIQUE (shelf_letter, call_number)
) ;
复制表格
CREATE TABLE Copies
(
copy_id INTEGER NOT NULL ,
book_id INTEGER NOT NULL ,
copy_number INTEGER NOT NULL,
constraint copy_number_unique unique(book_id,copy_number)
) ;
触发器(在更新、编辑 Book 表时)应将其相应的副本记录添加到 Copies 表中。因此,如果插入 Books 表的 Book.no_of_copies 为 5,则应将五个新记录插入 Copies 表中。
【问题讨论】:
-
什么?我们应该如何决定
copy_id?如果no_of_copies被编辑,例如从 5 到 3,应该删除哪些行副本? -
copy_id 是主键并且处于自动增量状态。关于 5 到 3 的减少,要求说它应该抛出一个应用程序错误(所以基本上是不允许的)。但如果它从 5 增加到 7,则应该再添加两条记录。谢谢!
标签: sql database oracle triggers oracle-sqldeveloper