Столбец UPDATE в той же таблице после INSERT с использованием триггера в Oracle - PullRequest
0 голосов
/ 01 декабря 2018

Мне нужно обновить один столбец в той же таблице после вставки.Вставка уже закодирована и не может быть изменена.Поэтому мы используем подход TRIGGER для обновления значения одного столбца.

create or replace TRIGGER "BLT_TRIGGER" 
AFTER INSERT ON BLT_MAPPING 
FOR EACH ROW
BEGIN
UPDATE BLT_MAPPING 
SET FIELD_ID = (SELECT CASE WHEN CORR_TI = 'B' THEN '12345' ELSE '54321' END 
AS INSTITUTION FROM BROKER CO,LOAN LO
WHERE LO.CORR_ID = CO.CORR_ID AND LO.LOAN_ID = loanid_in_BLT_MAPPING_table 
whcih_got_inserted )
END;

Я получаю ошибку очистки.Какую ошибку я делаю в тонком триггере.

1 Ответ

0 голосов
/ 01 декабря 2018

Вы пытаетесь обновить ту же строку, которую только что вставили?В этом случае вы хотите сделать этот триггер BEFORE INSERT и изменить :NEW.fieldid до того, как он будет вставлен в таблицу.Примерно так:

create or replace TRIGGER "BLT_TRIGGER" 
BEFORE INSERT ON BLT_MAPPING 
FOR EACH ROW
    l_new_fieldid     number; -- Or whatever the correct datatype is
BEGIN

    SELECT CASE WHEN CORR_TI = 'B' THEN '12345' ELSE '54321' END 
      INTO l_new_fieldid
      FROM BROKER CO,LOAN LO
     WHERE LO.CORR_ID = CO.CORR_ID 
       AND LO.LOAN_ID = :NEW.loanid;

    :NEW.fieldid := l_new_fieldid;

END;

Но это худшее решение.Триггеры затеняют то, что вы пытаетесь действительно сделать, и их трудно отлаживать, когда есть проблема.Лучшее решение - исправить ваше заявление INSERT тем, что вы действительно пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...