140 likes | 211 Vues
Trigger-abhängige Client Interaktionen (bezüglich Oracle8 i). 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
E N D
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 : StoredProcedures & 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 StoredProcedures & 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 nunals praktisches BeispielMail-Benachrichtigungper 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