2015-05-12 79 views
0

我在表上使用BEFORE INSERT或UPDATE觸發器,並且想要查詢觸發器中的同一個表。 觸發器是FOR EACH ROW。帶觸發器的變異表?

編譯時,觸發器順利編譯,沒有錯誤和警告,處於有效狀態。 但觸發器不執行我查詢此表和之後的代碼。

所有的代碼都在檢查客戶是否已經使用了debitnote#(存儲在Attribute1中)。如果它已經使用然後拋出錯誤,否則繼續。

我無法做到這一點。它是Mutuatuing表錯誤?。任何幫助將不勝感激。

CREATE OR REPLACE TRIGGER APPS_APPL.XX_OZF_DBTNUM_INS_TRG 


BEFORE INSERT OR UPDATE 
    ON OZF_CLAIM_LINES_ALL 
    FOR EACH ROW 
    WHEN (NEW.org_id = 43) 
DECLARE 
    ln_cust_account_id NUMBER; 
    ln_debit_cust_count NUMBER; 
    le_claim_invalid  EXCEPTION; 
    lv_attribute1   VARCHAR2 (100); 
BEGIN 
    --Get Customer account Id for this new ClaimID 
    SELECT cust_account_id 
    INTO ln_cust_account_id 
    FROM ozf_claims_all 
    WHERE claim_id = :NEW.CLAIM_ID; 

    --Get Count of Records That this customer has same debitNote# 
    SELECT COUNT (ocla.claim_line_id) 
INTO ln_debit_cust_count 
    FROM ozf_claims_all oca, ozf_claim_lines_all ocla 
WHERE  oca.claim_id = ocla.claim_id 
     AND oca.cust_account_id = ln_cust_account_id 
     AND ocla.debitnum = :NEW.debit_number; 

    --If count is more then 0 then throw error else proceed 
    IF ln_debit_cust_count > 0 
    THEN 
     RAISE le_claim_invalid; 
    END IF; 
EXCEPTION 
    WHEN le_claim_invalid 
    THEN 
     fnd_message.set_name ('OZF', 'XX_OZF_DEBITNUM_VALIDATION'); 
     fnd_msg_pub.ADD; 
     RAISE fnd_api.g_exc_error; 
END; 
/
+0

避免使用'當其他人那麼NULL;'那麼你會看到錯誤。 –

+2

'當其他人那麼NULL'本身就是一個錯誤。見[當其他人那麼NULL - 一個錯誤](http://lalitkumarb.wordpres.com/2014/05/02/when-others-then-null-a-bug/) –

+0

謝謝,我將刪除該部分的代碼。但仍然需要你的幫助來解決這個錯誤。 – Jaggu

回答

0

我猜你要確保有不OZF_CLAIM_LINES_ALL多行對同一CLAIM_ID和DEBIT_NUMBER。

如果這是真的,則可以在列CLAIM_ID和DEBITNUM上的表OZF_CLAIM_LINES_ALL上添加唯一鍵約束。

ALTER TABLE table_name 
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n); 

如果這不是一個選項,唯一的選擇是使用一個觸發器,你可以解決它通過使用行觸發器(比如你有一個),而不是選擇從您可以在同一臺將其添加到臨時表中。然後使用語句觸發器從臨時表和要更新的表中進行選擇。如果計數> 0,那麼你可以提高你的錯誤。