14
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 Sv

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

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 2: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 3: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 4: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 5: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 6: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 7: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 8: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

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

Page 9: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

„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 desSMTP-Protokolls

•Abstützen auf integrierte JServer API

Page 10: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

„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;

Page 11: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

„Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner

Trigger in Javaverschiedene 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.2Praxis: 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 NetzwerkPraxis: DB-Account darf keine Socket-Verbindung herstellen(Admin??)

Page 12: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

„Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner

Trigger in C

Funktionen liegen auf Datenbank-Server, aber nicht imAdressraum 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)

Page 13: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

„Trigger-abhängige Client Interaktionen“ von Mariusz Kukulski und Sven Bittner

Und nun

als praktisches Beispiel

Mail-Benachrichtigung

per Trigger

Page 14: Trigger-abhängige Client Interaktionen (bezüglich  Oracle8 i)

„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