Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Beste Möglichkeit, eine E-Mail zu erhalten, nachdem gleichzeitig ein Fehler aufgetreten ist (sql - trigger - application)

Sie können doppelte Pipes verwenden (|| ) als Verkettungsoperatoren und filtern Sie die Ergebnisse nach Ihren gewünschten Statustypen heraus, die in Klammern hinter dem IN aufgeführt sind Operator für die Abfrage.

Erstellen Sie eine Prozedur und nehmen Sie Ihre Abfrage als Cursor hinein und verwenden Sie utl_http Paket innerhalb dieses Verfahrens wie folgt:

create or replace procedure pr_mail_me is

  v_email varchar2(100) := '[email protected]';
  v_rep   varchar2(4000);
  v_url   varchar2(4000);

  cursor crs_request is
  select 'The concurrent '||program||' with request_id '||request_id||' ended with status '|| 
           status as message, request_id
    from
    (
       <the subquery>
      )
   where rn = 1
     and status in ('WARNING','ERROR','STAND BY');    

begin

  for c in crs_request
  loop
  begin

    v_url := 'http://www.mycompany.com/path_to/default.aspx?email=' ||
              v_email ||'&out_message='||c.message||'&out_request_id='||c.request_id;
    v_rep := utl_http.request(utl_url.escape(v_url,false,'UTF-8'));

   exception
       when others then
            v_url := 'http://www.mycompany.com/path_to/default.aspx?email=' ||
                      v_email ||'&out_message='||substr(sqlerrm,1,250)||'&out_request_id='||c.request_id;
                      v_rep := utl_http.request(utl_url.escape(v_url,false,'UTF-8'));
        end;
  end loop;
end;

um E-Mails zu erhalten, die dieses Verfahren aufrufen.