Trigger-abhängige Client Interaktionen (bezüglich Oracle8i) oder : Was ein Trigger so alles „anstoßen“ kann... „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Inhalt • Der Trigger • Strored Procedures & Stored Functions • Vorteile von Stored Procedures & Functions • Anwendungsmöglichkeiten • Wie geht das denn genau?? „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Der Trigger (der Auslöser) • wird von der Datenbank ausgelöst, wenn mit einer DML (database modifying language) Daten in der Datenbank verändert werden • kann mit dem CALL-Befehl eine „Stored Procedure“ oder eine „Stored Function“ auslösen • ist die Taste mit nahezu unbegrenzten Möglichkeiten „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Beispiel : Trigger CREATE TRIGGER Triggername AFTER UPDATE OF Spalte ON Tabellenname FOR EACH ROW BEGIN Anweisung1; ... END; „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Stored Procedures & Stored Functions • sind lokal in der Datenbank gespeichert • Stored Procedures (für void Methoden) • Stored Functions (für Methoden mit Rückgabewert) • Aufrufen von Stored Procedures & Functions – SQL DML-Befehlen ( INSERT, UPDATE, DELETE und SELECT) – SQL CALL-Befehl „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Beispiel : Stored Procedures & Functions PROCEDURE Prozedurname IS Variable1 Datentyp; ... BEGIN Anwendung1; ... EXCEPTION when ... END Prozedurname; „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Vorteile von Stored Procedures & Functions • hohe Geschwindigkeit – bereits kompilierter Code serverseitig ausgeführt • einfache Einbindung von Methoden (Java, C) • systemunabhängig und vielnutzerfähig „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Anwendungsmöglichkeiten • Als Reaktion auf Datenbank-Veränderungen kann über Trigger alles, was auch mit Stored Procedures & Functions möglich ist, ausgeführt werden. – – – – Mail-Benachrichtigungen Ausführung von Prozeßketten ( -folgen) Automatisierung von Verwaltungsprozessen ...noch Ideen? „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Trigger in PL/SQL Nutzen der mitgelieferten packages: •utl_http •utl_tcp •utl_smtp - Verbindung mit HTTP-Server per HTTP-Protokoll - Kommunikation per TCP/IP Protokoll - Senden von E-Mail Beispiel utl_smtp: •Sehr unkomfortabel, da Kommunikation auf niederer Ebene des SMTP-Protokolls •Abstützen auf integrierte JServer API „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Trigger in PL/SQL(2) Beispiel-Prozedur: CREATE OR REPLACE PROCEDURE sendMail ( Parameter ) IS mail_conn utl_smtp.connection; BEGIN mail_conn := utl_smtp.open_connection( mailhost ); utl_smtp.helo(mail_conn, mailhost); utl_smtp.mail(mail_conn, sender); utl_smtp.rcpt(mail_conn, recipient); utl_smtp.data(mail_conn, message); - Nachricht gemäß RFC821 utl_smtp.close_data(mail_conn); utl_smtp.quit(mail_conn); END; „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Trigger in Java verschiedene Möglichkeiten: •Hochladen der gesamten Applikation in den Oracle-Server + Vermeidung der Netzzugriffe auf die DB + leichtes Kopieren in andere DB + Änderungen auf Server leicht zu handhaben - eventuelles Laden von ganzen Bibliotheken in die DB - Oracle8i unterstützt Java1.2 Praxis: hochladen der JavaMail, JB Activation Framework und Teilen der 1.3 JDK sprengen genutzen DB-Account •Anstoßen eines Prozesses auf einem anderen Server (zB per Socket) + Applikation kann komplett auf Server laufen und dessen Fkt. nutzen - Performanceverlust des auslösenden Ereignisses durch Kommunikation über Netzwerk Praxis: DB-Account darf keine Socket-Verbindung herstellen(Admin??) „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Trigger in C Funktionen liegen auf Datenbank-Server, aber nicht im Adressraum der DB + Nutzung der Funktionalität und Geschwindigkeit von C + Nutzen anderer Sprachen (Assembler, C++ etc) - Zeitverlust durch Ausführen ausserhalb der DB - Zeitverlust durch eventuelles Laden Funktionen (sind in DLL‘s verpackt) „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Und nun als praktisches Beispiel Mail-Benachrichtigung per Trigger „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner Die Tabelle: CREATE OR REPLACE TABLE trigger_test ( rec VARCHAR2(100) NOT NULL, text VARCHAR2(100) NOT NULL ); Der Trigger: CREATE OR REPLACE TRIGGER test_trig1 AFTER INSERT ON trigger_test FOR EACH ROW CALL send_Mail(:new.rec, :new.text) Das Resultat: Eine Email mit dem eingetragenen Text an den eingetragenen Empfänger „Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner