仅允许将3行添加到表中以获取特定值

时间:2017-11-14 07:40:56

标签: sql oracle insert sql-insert

我手头有一个问题,我需要将分配给经理的项目数量限制在3个。表格是:

{{1}}

有人可以建议采取什么方法来实现这个目标吗?

3 个答案:

答案 0 :(得分:3)

  

“我如何将限制实施到0,3?”

这需要一个断言,它在SQL标准中定义但在Oracle中没有实现。 (虽然有moves to have them introduced)。

您可以使用物化视图来透明地执行它。

create materialized view project_manager
refresh on commit 
as 
select Project_manager_employee_id
        , count(*) as no_of_projects
from project
group by Project_manager_employee_id
/

神奇的是:

alter table project_manager
   add constraint project_manager_limit_ck check 
       ( no_of_projects <= 3 )
/

如果管理器的项目计数超过3,则此检查约束将阻止实例化视图刷新,该故障将导致触发插入或更新失败。不可否认,这并不优雅。

因为mview在提交时刷新(即事务性地),所以你需要在project表上构建一个日志:

create materialized view log on project

答案 1 :(得分:0)

我会做以下事情:

  1. 使用默认值创建新列projects_takentinyint)(1)(取值1230
  2. 当经理接受项目时,该字段将增加1
  3. 进行简单检查(通过用户界面),查看字段projects_taken是否等于或小于3

答案 2 :(得分:0)

我会做以下事情:

  1. 为操作插入/更新创建一个SP。
  2. 使用IF检查不存在Project_manager_employee_id(FK)计数&lt; 3 然后只进行插入/更新。否则发送投掷错误。