知道为什么这个约束似乎没有被触发吗?
CREATE OR REPLACE FUNCTION UNITS_APPLY_CONVERSION_IND_CHECK (P_UNITS_REF_CODE VARCHAR2) RETURN NUMBER DETERMINISTIC IS
v_cnt NUMBER;
BEGIN
SELECT Count(*)
INTO v_cnt
FROM wms.units
WHERE units_ref_code = P_UNITS_REF_CODE
AND apply_conversion_ind = 'Y';
RETURN v_cnt;
END;
然后
ALTER TABLE UNITS ADD (UNITS_APPLY_CONVERSION_IND_Count NUMBER GENERATED ALWAYS AS (UNITS_APPLY_CONVERSION_IND_CHECK(units_ref_code)) VIRTUAL);
然后
ALTER TABLE UNITS
ADD CONSTRAINT UNITS_APPLY_CONVERSION_IND_Cons CHECK(UNITS_APPLY_CONVERSION_IND_Count <= 1);
然而,通过上述内容,我可以更新我想让我的虚拟列超过 1 的任何行 - 约束并没有阻止我。有任何想法吗?
它看起来像你只是想确保units_ref_code
在表时唯一apply_conversion_ind = 'Y'
。假设是这种情况,您只需要一个基于函数的唯一索引。您不需要函数或虚拟列。
create unique index idx_one_units_ref_code
on units( case when apply_conversion_ind = 'Y'
then units_ref_code
else null
end );
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句