2015-05-12 24 views
0

我想之前在表上客戶INSERT或UPDATE觸發器創建觸發器的:觸發器無法在同一個表上查詢?

Create table customer 
(CustNum Number, 
DebitNum Number 
); 

我需要在觸發做的驗證是指客戶未與同一DebitNum分配兩次。

所以我的觸發代碼:

CREATE OR REPLACE TRIGGER XX_MYTRIG 
BEFORE INSERT OR UPDATE 
ON CUSTOMER 
DECLARE 
ln_count Number; 
BEGIN 
    Select count(CustNum) into ln_count 
    from customer 
    where CustNum:=:New.CustNum 
    and DebitNum:=NEW.DebitNum; 
    IF ln_count>0 then 
     RAISE fnd_api.g_exc_error; 
    END IF; 
END; 

當我插入或更新我注意到,SELECT語句甚至沒有執行。 如何在同一張桌子上查詢...?

+0

您的數據模型令人費解。我們希望CUSTNUM成爲名爲CUSTOMER的表的主鍵。那麼,如何給任何客戶提供多於一個的DEBITNUM,複製或其他? – APC

+0

您的意思是說一個客戶不能分配兩次相同的DebitNum;或者兩個客戶不能分配相同的DebitNum?你怎麼知道選擇沒有被執行 - 除了你在發佈的代碼中的第二個NEW之前缺少冒號,所以觸發器可能是無效的? –

回答

0

我認爲你可以通過在列CustNum和DebitNum上添加唯一約束來實現這一點。這種方法比用觸發器實施要有效得多。

ALTER TABLE customer 
ADD CONSTRAINT constraint_name UNIQUE (CustNum , DebitNum);