[英]Oracle SQL: Constraint on virtual column
知道為什么這個約束似乎沒有被觸發嗎?
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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.