2016-05-03 4 views
-1

Ich habe eine Prozedur in Oracle geschrieben, die eine E-Mail senden wird. Ich möchte Variablen in den Hauptteil der Nachricht aufnehmen, die sich auf die in einem anderen Verfahren berechneten Variablen beziehen sollten.PL/SQL-Prozedur Senden von E-Mail mit Variablen

Als Beispiel lassen Sie uns sagen, ich habe Prozedur:

select a1+a2 
into a 
from table c; 

Und der nächste Schritt wäre, eine E-Mail zu schicken, darunter eine, wie:

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 => '[email protected]', 
           recipients => '[email protected]', 
           message => l_html,    
           mime_type => 'text/html' 
           ); 

Der Code stark vereinfacht ist die zeigen, allgemeine Idee, nach der ich suche, ist, wie man eine Verbindung zwischen zwei Verfahren wie diesen herstellt. Da das erste Verfahren ziemlich umfangreich ist, ist das Senden einer E-Mail innerhalb derselben Prozedur keine Option. Vielen Dank im Voraus für irgendwelche Tipps/Ideen!

+0

Verwenden Sie globale Variablen – JavaHopper

+1

Post einige Code bitte, so ist es ziemlich unmöglich zu beantworten. Wie auch immer Ihr Code ist, globale Variablen sind nie eine gute Lösung für mich. – Aleksej

+0

Warum sind globale Variablen niemals eine gute Lösung? –

Antwort

0

Sie können einfach eine andere Funktion/Prozedur innerhalb Ihrer Mail-Prozedur aufrufen; zum Beispiel:

/* 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 => '[email protected]', 
        recipients => '[email protected]', 
        message => html,    
        mime_type => 'text/html' 
       ); 
    */ 
end; 

Sie können es so nennen:

SQL> exec MAIL; 

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

</body> 
      </html> 

PL/SQL procedure successfully completed. 

Dies ist ein sehr einfaches Beispiel ist; Die Schnittstelle der aufzurufenden Funktion/Prozedur hängt von Ihrem Code ab, Sie müssen nur Ihre Prozedur bearbeiten, damit sie aufgerufen werden kann und das gewünschte Ergebnis zurückgeben.

+0

Aber jetzt müssen die zwei Funktionen/Prozeduren in einem einzigen Verfahren implementiert werden, oder liege ich falsch? –

+0

Keine Notwendigkeit dafür; Sie können ein Paket verwenden, um beide zu enthalten, aber das ist nicht unbedingt notwendig. Das Beispiel, das ich gepostet habe, funktioniert irgendwie wie es ist, nur bearbeitet, um den Prozeduraufruf zu zeigen – Aleksej