2015-05-12 4 views
0

Я использую триггер ДОПОЛНИТЕЛЬНОГО ИЛИ ОБНОВЛЕНИЯ на столе и хочу запросить ту же таблицу в триггере. Триггер - ДЛЯ КАЖДОЙ РУКИ.Столы для переустановки с триггерами?

При компиляции триггер успешно выполнен без ошибок и предупреждений и находится в состоянии Valid. Но триггер не выполняет код, откуда я запрашиваю эту таблицу и после нее.

Весь код выполняет проверку того, что клиент уже использовал дебетограмму # (хранится в атрибуте 1) или нет. Если он уже используется, то запустите еще раз.

Я не могу этого сделать. Является ли это ошибкой таблицы? ». Любая помощь была бы оценена.

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

Избегайте использования 'WHEN OTHERS THEN 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.

Если это правда, вы можете добавить уникальное ограничение ключа в таблицу OZF_CLAIM_LINES_ALL на столбцах CLAIM_ID и DEBITNUM.

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

Если это не вариант, и единственным вариантом является использование триггера, вы можете работать вокруг него с помощью триггера строки (как тот, у вас есть) и вместо того, чтобы выбрать из той же таблицы можно добавьте его в таблицу temp. Затем используйте триггер оператора для выбора из таблицы temp и таблицы, которую вы хотите обновить. Вот где вы можете повысить свою ошибку, если count> 0.

Смежные вопросы