У меня есть процесс массовой загрузки данных, посредством которого я загружаю данные в таблицу под названием TICKETS .Ниже приведена структура таблицы с фиктивными данными:
+----------+---------------+--------------+
| TicketID | Email | Payment_Hold |
+----------+---------------+--------------+
| 1 | smith@abc.com | YES |
| 2 | john@abc.com | NO |
| 3 | mary@abc.com | YES |
| 4 | jane@abc.com | YES |
| 5 | king@abc.com | NO |
+----------+---------------+--------------+
После процесса загрузки данные в нескольких строках изменяются, либо вставляются новые строки, либо обновляются существующие строки.Ниже приведен снимок данных после загрузки:
+----------+---------------+--------------+
| TicketID | Email | Payment_Hold |
+----------+---------------+--------------+
| 1 | blake@abc.com | YES |
| 2 | john@abc.com | YES |
| 4 | jane@abc.com | NO |
| 5 | scott@abc.com | NO |
| 6 | jim@abc.com | YES |
+----------+---------------+--------------+
С учетом вышесказанного я пытаюсь отправлять уведомления сотруднику, работающему с тикетом, при изменении данных в двух столбцах, т. Е.
- Для определенного идентификатора TicketID, если лицо изменилось и если у билета есть задержка платежа, отправьте уведомление новому человеку, работающему с билетом, и
- Если задержка платежа по TicketID изменилась, отправьте уведомление человеку, работающему сticket.
Лучший из возможных способов достижения этой цели - создание таблицы аудита на основе значений и триггера (после вставки или обновления) для таблицы TICKETS для регистрации изменений.Ниже приведен TICKETS_AUDIT_TABLE
+-----+----------+---------------+---------------+------------------+------------------+
| ID | TicketID | Old Email | New Email | Old_Payment_Hold | New_Payment_Hold |
+-----+----------+---------------+---------------+------------------+------------------+
| 100 | 1 | smith@abc.com | blake@abc.com | YES | YES |
| 200 | 2 | john@abc.com | john@abc.com | NO | YES |
| 300 | 4 | jane@abc.com | jane@abc.com | YES | NO |
| 400 | 5 | king@abc.com | scott@abc.com | NO | NO |
| 500 | 6 | NULL | jim@abc.com | NULL | YES |
+-----+----------+---------------+---------------+------------------+------------------+
А для электронной почты я использую ниже код pl / sql:
DECLARE
vemailbody CLOB := NULL;
CURSOR c1 IS
SELECT *
FROM tickets_audit_table
ORDER BY id;
BEGIN
wwv_flow_api.set_security_group_id;
vemailbody := vemailbody
|| '<table><tr><th>Ticket Update</th></tr><tr>
<th><b>Ticket ID</b></th>
<th>Old Email</th>
<th>New Email</th>
<th>Old Payment Hold Flag</th>
<th>New Payment Hold Flag</th> </tr>';
FOR rec IN c1 LOOP
vemailbody := vemailbody || '<tr> <td>' || rec.ticketid
||'</td> <td>' || rec.old_email
||'</td> <td>' || rec.new_email
||'</td> <td>' || rec.old_payment_hold
||'</td> <td>' || rec.new_payment_hold
||'</td> </tr>'|| utl_tcp.crlf;
END LOOP;
vemailbody := vemailbody || '</table>' || utl_tcp.crlf;
vemailbody := vemailbody || '<br>' || utl_tcp.crlf;
vemailbody := vemailbody || '</td>'|| utl_tcp.crlf;
vemailbody := vemailbody || '</tr>'|| utl_tcp.crlf;
vemailbody := vemailbody || '</table>'|| utl_tcp.crlf;
dbms_output.Put_line(vemailbody);
apex_mail.Send(p_to => 'richa@abc.com',
p_from => 'Test Mail <test@abc.com>',
p_subj => 'Ticket update',
p_body => vemailbody,
p_body_html => vemailbody);
apex_mail.push_queue;
END;
Проблема здесь в том, что электронная почта запущенанесколько раз для пользователей, которые ранее получили письмо.Я не уверен, как отправить уведомление по электронной почте на основании следующих условий: Например: с учетом идентификатора билета = 1
- Если (Old_Email не равно New_Email) AND (Old_Payment_Hold не равно New_Payment_Hold), то отправьте письмотолько на New_Email
- Если электронное письмо уже отправлено для билета с идентификатором = 1, где (New_Email = Old_Email) и (Old_Payment_Hold = New_Payment_Hold), то не отправлять электронную почту.
Я действительно ценюлюбая помощь по этому поводу.
Спасибо,
Рича