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 - Verbindung mit HTTP-Server per HTTP-Protokoll utl_tcp - Kommunikation per TCP/IP Protokoll utl_smtp - 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: Der Trigger: Das Resultat: 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