0

有没有办法让oracle通过约束检查表的其他记录?

举个例子:

我有一个名为的表ENI_TRASC_VOCI_PWR_FATT,我希望每条tvp_regione不为 null 的记录都有一条类似的记录tvp_regione= null。

对于类似的记录,我需要检查它在列上是否具有相同的值TVP_CODICE_ASSOGGETAMEN

4

2 回答 2

3

我能想到的唯一方法是在刷新物化视图上使用快速提交,使用如下查询定义:

select
  tvp_codice_assoggetamen,
  count(*)           rows_per_tca,
  count(tvp_regione) tvp_regione_per_tca
from
  eni_trasc_voci_pwr_fatt
group by
  tvp_codice_assoggetamen
/

在 MV 表上放置常规检查约束,例如 tvp_regione_per_tca = 1 如果 rows_per_tca = 2(您的要求对我来说不是很清楚)。

这通常是在 Oracle 中实现这种多行约束的唯一安全方法,没有在修改表之前锁定表以进行更改并使用代码进行检查。

于 2012-05-23T13:18:16.990 回答
1

根据Oracle 文档

检查约束条件不能包含以下构造:
子查询和标量子查询表达式

所以你可能不得不使用触发器:

create or replace trigger trg
before insert or update on ENI_TRASC_VOCI_PWR_FATT
for each row

begin
   -- do whatever queries you need - I didn't understand what you want
   if <some condition> then
     raise_application_error(-20000,'no good');
   end if;
end;

但要小心!触发器不像约束 - 想想如果两个用户更新表会发生什么......

于 2012-05-23T12:39:13.640 回答