0
我在Oracle SQL中創建表時遇到問題。Oracle SQL設置單個唯一字符
我正在尋找一個名爲DEFAULTRULE的列。在任何給定時間,此列中只有1行可以是'1'。因此,例如
ID DEFAULTRULE
1 0
2 0
3 1
如果我是更新ID 2爲具有默認規則= 1條,則這將任一組ID 3默認規則來0
或
拋出錯誤(我不只要噸真的介意只有一個「1」)
我試圖創建觸發器做到既但不斷收到
ORA-04091表正在變異,觸發器/函數可能看不到它。
2我的嘗試:
CREATE OR REPLACE TRIGGER CHECKDEFAULTRULE
BEFORE UPDATE ON BUSINESS_RULE
FOR EACH ROW
DECLARE
v_count NUMBER(1);
BEGIN
IF :NEW.DEFAULTRULE = 1 THEN
SELECT COUNT(DEFAULTRULE)INTO v_count FROM BUSINESS_RULE WHERE DEFAULTRULE = 1;
IF v_count != 0 THEN
RAISE_APPLICATION_ERROR(-20000,'BUSINESS_RULE already has a default rule. Please set this to 0 and try again');
END IF;
END IF;
END;
和
CREATE OR REPLACE TRIGGER CHECKDEFAULTRULE
BEFORE UPDATE ON BUSINESS_RULE
FOR EACH ROW
BEGIN
IF :new.DEFAULTRULE = 1 THEN
UPDATE BUSINESS_RULE
SET DEFAULTRULE = 0;
WHERE DEFAULTRULE = 1;
END IF;
END checkDefaultForOne;
會有人能夠指出我在正確的方向? 在此先感謝。 Jon
謝謝kordirko。真的很感謝幫助和瘋狂的快速反應! 我剛剛發現後發現: http://dba.stackexchange.com/questions/4815/how-to-implement-a-default-flag-that-can-only-be-set-on-單排 沒想到有人會這麼快回復! 這就像一個魅力:D – 2014-11-06 17:26:25