PL/SQL процедура отправки электронной почты с переменными

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

В качестве примера, скажем, у меня есть процедура:

select a1+a2
into a
from table c;

И следующим шагом будет отправка электронного письма, включая:

create or replace PROCEDURE MAIL AS 
BEGIN
DECLARE
  l_html VARCHAR2(32767);
BEGIN
  l_html := '<html>
<body>
  <p>a</p>  <!-- here I'd like my result from another procedure to appear-->
 </body>
  </html>';
    utl_mail.send(sender => 'something@bla.com',
                                 recipients => 'bla@bla.com',
                                 message => l_html,               
                                 mime_type => 'text/html'
                                 );

Код слишком упрощен, чтобы показать общую идею, и я ищу, как установить связь между двумя подобными процедурами. Поскольку первая процедура довольно обширна, отправка почты в рамках одной и той же процедуры невозможна. Заранее спасибо за любые советы / идеи!

1 ответ

Вы можете просто вызвать другую функцию / процедуру в вашей почтовой процедуре; например:

/* define a function that computes some needed result */
create or replace function someFunction return varchar2 is
    retVal  varchar2(1000);
begin
    select 'my content'
    into retVal
    from dual;        
    return retVal;
end;                  
create or replace procedure MAIL as
    html varchar2(32767);
    variableContent varchar2(1000);    
begin
    /* use your function to get your variable content */
    variableContent := someFunction();
    html := '
            <html>
              <body>
                <p>' || variableContent || '</p>
              </body>
            </html>';
    dbms_output.put_line(html);
    /*
    utl_mail.send(sender => 'something@bla.com',
                  recipients => 'bla@bla.com',
                  message => html,               
                  mime_type => 'text/html'
                  );
    */
end;

Вы можете назвать это так:

SQL> exec MAIL;

            <html>
              <body>
                <p>my content</p>

</body>
            </html>

PL/SQL procedure successfully completed.

Это очень простой пример; Интерфейс вызываемой функции / процедуры зависит от вашего кода, вам нужно только отредактировать вашу процедуру, чтобы она могла быть вызвана, и вернуть необходимый результат.

Другие вопросы по тегам