需要保证表中存在具有一定值的单行。也就是说,这样在更新和添加记录时,该列和当前记录的值获取值 1,其余所有值 - 0。
试图让它成为一个触发器。before insert一切都很好。但是要更新什么呢?或者除了触发器之外还有其他一些解决方案?
例子:
-- Создаем таблицу
create table tx (
id integer,
val varchar2(100)
);
-- Данные
-- truncate table tx
insert into tx
select level, 0 from dual connect by level < 11;
update tx set val = 1 where id = 5;
commit;
只能添加 1 条记录,也可以更新。
添加和更改时,您需要:
val = 1记下前一个值为 0的条目- 对于最后修改的条目,最好强制
val = 1.
作为一种解决方法,我建议更改表格:
现有查询不会注意到此表更改。现在,最后修改的标志将只存储最后一个条目。使用单个条目进行快速搜索的索引,因为
NULL值不被索引。在复合触发器中
update,应指定所有可以更改的列,并且lastrow为了避免递归触发器调用,应省略:测试和结果: