【问题标题】:Oracle PL/SQL Multiple insert without duplicate valueOracle PL/SQL 多次插入无重复值
【发布时间】:2016-07-23 11:56:06
【问题描述】:

我有表调用reviewbook 表。用户需要为一个 bookid 分配 3 个不同的评论成员。它们可以是任何reviewmemberid,只要它们是一个bookid 的3 个不同的。下面是我想要的结果。现在,我能想到的是在查询中进行多次插入,但是,reviewmemberid 可以重复,这不是我想要的。我听说触发器可以是这样做的一种方式,但我不知道如何应用它。有人可以指导我吗,或者是否有更好的方法。

   Reviewbook
   -reviewid
   -reviewmemberid
   -bookid

  reviewid  reviewmemberid  bookid
      1           2           1     
      2           3           1
      3           5           1
      4           1           2 
      5           2           2
      6           5           2
      7           1           3
      8           2           3
      9           4           3    



//My current insert code, but this insert code can insert duplicate reviewmemberid.
INSERT ALL INTO REVIEW (REVIEWID,REVIEWMEMBERID,BOOKID)VALUES
(?.?,?) INTO REVIEW
(REVIEWID,REVIEWMEMBERID,BOOKID)VALUES 
(?.?,?) INTO REVIEW
(REVIEWID,REVIEWMEMBERID,BOOKID)VALUES 
(?.?,?) SELECT * FROM DUAL;

【问题讨论】:

  • 您只是想确保(REVIEWMEMBERID,BOOKID) 的每个组合只出现一次,还是比这更复杂?
  • 是的,所以 3 个不同的 reviewmemberids 到一个 book id,这个 bookid 就完成了。用户将继续分配下一个 bookid。
  • (REVIEWMEMBERID,BOOKID) 上放置一个唯一索引就足够了吗?
  • 你能指导我吗?
  • 您的问题中没有 PL/SQL。为什么你认为你需要一个存储过程?

标签: oracle plsql triggers insert


【解决方案1】:

另一种选择是简单地在列(REVIEWMEMBERID,BOOKID) 上声明一个唯一索引。语法是

CREATE UNIQUE INDEX book_reviewer_idx
  ON review (reviewmemberid, bookid);

这将确保(reviewmemberid, bookid) 的特定配对仅在表中出现一次;尝试插入重复项会引发错误。

【讨论】:

  • 添加约束不能回答如何在有问题的示例上添加不重复项。
  • 当然可以。该约束防止reviewmemberid, bookid 的任何组合仅出现一次,这是 OP 想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
相关资源
最近更新 更多