【问题标题】:Limit inserts to 6 rows per id将每个 id 的插入限制为 6 行
【发布时间】:2019-01-26 14:36:12
【问题描述】:

我正在学习 Hibernate 创建一个基本的控制台应用程序,使用 Oracle 作为后端。我有一张桌子,如果学生进入第 7 条记录,他不应该被允许这样做。我该怎么做?

【问题讨论】:

  • 您需要一个触发器来限制每个用户插入的行数。
  • 你的桌子上大概有一列标识了学生?
  • @GordonLinoff - 看看你有什么样的触发器会很有趣。可能有一种方法可以为此使用触发器,但任何解决方案都必然是复杂且低效的。在提出建议之前,请先考虑“变异表”问题。
  • 您的意思是每个学生使用数据库的次数限制为 6 次插入,还是您的意思是每个学生 ID 最多可以在表中出现 6 次?

标签: sql oracle hibernate plsql


【解决方案1】:

除了触发器之外,您还可以创建一个物化视图,然后在表上创建一个检查约束。

create materialized view log on test_table;

create materialized view mv_test_table
 refresh FAST on COMMIT
 ENABLE QUERY REWRITE 

as
  select id, count(*) cnts
    from test_table
   group by id;

alter table test_table
  add constraint check_userid
  check (cnts< 7);

【讨论】:

    【解决方案2】:

    您也可以使用简单的触发器(前提是您的表有 ID 列):

    create or replace trigger trg_limit_row
    after insert on your_table
    for each row
    begin
      if :new.id >5 then -- assume that you have id in range (0-5) -> 6 rows
        execute immediate 'delete from your_table t where t.id = ' 
        || ':' || 'new_id';
      end if;
    end;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-07
      • 2019-01-26
      • 2013-02-25
      • 2022-01-20
      • 2013-04-07
      • 1970-01-01
      • 2017-08-28
      相关资源
      最近更新 更多