Oracle

Oracle

Manchmal gibt es Fälle, in denen anhand des Quellcodes des Softwaresystems nicht ersichtlich ist, wann ein Datensatz in der Datenbank geändert oder hinzugefügt wurde. Um bei solchen unklaren Aktivitäten informiert zu werde, wenn bestimmte Datenbankaktivitäten stattfinden, können Sie Tabellen-Trigger und das Oracle-Mailing-Packet verwenden. Voraussetzung ist das Vorhandensein des Oracle-Packets utl_mail sowie ein konfigurierter E-Mail-Server.

E-Mail Versand mittels Funktion

Für den Versand einer einfachen E-Mail auf einem korrekt konfiguriertem System habe ich folgende Oracle Funktion geschrieben. Diese nimmt meine variablen Parameter an und versendet diese Daten per E-Mail:

CREATE OR REPLACE FUNCTION fkt_mail_info (

receiver IN VARCHAR2,
subject  IN VARCHAR2,
message  IN varchar2

)
RETURN VARCHAR2
IS

t_sender VARCHAR2(100) := 'sendby@server.com';
t_host   VARCHAR2(100) := 'mailhost.server.com';
crlf     VARCHAR2(2)   := Chr(13)||Chr(10);
connection                UTL_SMTP.connection;

BEGIN

connection := UTL_SMTP.open_connection(t_host, 25);
UTL_SMTP.helo(connection, t_host);
UTL_SMTP.mail(connection, t_sender);
UTL_SMTP.rcpt(connection, receiver);
UTL_SMTP.open_data(connection);
UTL_SMTP.write_data(connection,'To: '||receiver||'<'||receiver||'>'||crlf);
UTL_SMTP.write_data(connection,'Subject: ' || subject ||crlf);
UTL_SMTP.write_data(connection, message||crlf);
UTL_SMTP.close_data(connection);
UTL_SMTP.quit(connection);
return 'OK';

end;

Auffallend ist hier, dass ich den Versand über eine Funktion statt über eine Prozedur abwickle. Ich habe mich für eine Funktion entschieden, um für eine spätere Erweiterung einen noch zu ermittelnden Rückgabewert weiterverarbeiten lassen zu können. Wie dies mittels Prozedur möglich ist, können Sie in diesem Wiki nachlesen.

Trigger auf Tabelle

Folgendes unkritisches Beispiel dient nur zur Demonstration der Funktionsweise. Ich selbst verwende den Trigger mit Mailversand für andere Prozessüberwachungen. Der hier beschriebene Trigger überwacht die Tabelle Kunde und schreibt ruft die E-Mail Funktion auf, sobald ein neuer Kunde über einen Fremdprozess in der Tabelle hinzugefügt wurde:

CREATE OR REPLACE TRIGGER kunde_insert
BEFORE INSERT
ON kunde
FOR EACH ROW

DECLARE

mailto VARCHAR2(100)  := 'marketing@system.com';
subject VARCHAR2(100) := 'Neuer Kunde';
message VARCHAR2(500) := 'Es wurde ein neuer Datensatz in Tabelle ''kunde'' eingefuegt.';
returncode VARCHAR2(5);

BEGIN

SELECT fkt_mail_info(mailto,subject,message) INTO returncode FROM dual;

END kunde_insert;

Es werden alle Einfügeoperationen mittels E-Mail bekannt gegeben. Natürlich kann der Trigger auch mittels WHERE-Bedingung eingeschränkt werden. Dies erkläre ich demnächst in einem separaten HowTo.

E-Mail Versand mit Oracle
Markiert in: