Выполнение кода PL / SQL после нового приращения - PullRequest
0 голосов
/ 22 октября 2018

У меня есть код pl / sql для отправки электронных писем (который работает нормально).Однако мне бы хотелось, чтобы он выполнялся при создании новой записи в пользовательской таблице и игнорировал старые записи. Сценарий

.введен новый пользователь (выполняется код pl / sql).Если я открываю таблицу и новый пользователь не вводится (без выполнения кода pl / sql).

если через 2 недели вводится новый пользователь (код выполняется)

, поэтому код выполняется только тогда, когда новая запись находится в таблице

Ниже представлен триггерчтобы создать новый идентификатор при вводе нового пользователя

create or replace trigger "BI_TEST"   
  before insert on "TEST"               
  for each row  
begin   
  if :NEW."ID" is null then 
    select "TEST_SEQ".nextval into :NEW."ID" from sys.dual; 
  end if; 
end; 

ниже приведен код для отправки писем

BEGIN
  UTL_MAIL.send(sender     => 'user@gmail.com',
                recipients => 'user1@gmail.com',

                subject    => 'UTL_MAIL Test',
                message    => 'If you get this message it worked!');
END;
/

1 Ответ

0 голосов
/ 22 октября 2018

Звучит так, будто вы хотите, чтобы триггер отправлял электронное письмо, когда в таблицу вставляется новая строка.Я бы оставил ваш существующий триггер один и добавил триггер после вставки.Представьте, что вы вставили нового пользователя, но данные нарушили ограничение - вставка откатилась бы, но триггер перед вставкой все равно отправил бы уведомление по электронной почте.

create or replace trigger "AI_TEST_EMAIL"   
  after insert on "TEST"               
  for each row  
begin   
  UTL_MAIL.send(sender     => 'user@gmail.com',
                recipients => 'user1@gmail.com',
                subject    => 'New user created',
                message    => 'A new row was inserted in TEST with username: ' || :NEW.username );
end; 
...