Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)

Werbung
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
Herunterladen