PL / SQL过程发送带变量

时间:2016-05-03 14:11:42

标签: oracle plsql plsqldeveloper

我在oracle中写了一个会发送电子邮件的程序。我想在消息正文中包含应该引用另一个过程中计算的变量的变量。

作为一个例子,假设我有程序:

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 个答案:

答案 0 :(得分:0)

您可以在邮件程序中调用不同的功能/程序;例如:

/* 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.

这是一个非常简单的例子;要调用的函数/过程的接口取决于您的代码,您只需编辑您的过程以便可以调用它并返回所需的结果。