<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Datenbanktrigger</id>
	<title>Datenbanktrigger - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Datenbanktrigger"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Datenbanktrigger&amp;action=history"/>
	<updated>2026-05-24T03:26:42Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Datenbanktrigger&amp;diff=35265&amp;oldid=prev</id>
		<title>imported&gt;Lómelinde: :Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern falsche Angabe lang=&quot;plsql&quot;  siehe auch Hilfe:Syntaxhighlight#Unterstützte Sprachen wurde wohl ersetzt oder geändert zu psql?</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Datenbanktrigger&amp;diff=35265&amp;oldid=prev"/>
		<updated>2023-06-21T05:51:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Kategorie:Wikipedia:Seite_mit_Syntaxhervorhebungsfehlern&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern (Seite nicht vorhanden)&quot;&gt;Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern&lt;/a&gt; falsche Angabe lang=&amp;quot;plsql&amp;quot;  siehe auch &lt;a href=&quot;/index.php/Hilfe:Syntaxhighlight#Unterstützte_Sprachen&quot; title=&quot;Hilfe:Syntaxhighlight&quot;&gt;Hilfe:Syntaxhighlight#Unterstützte Sprachen&lt;/a&gt; wurde wohl ersetzt oder geändert zu psql?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;Datenbanktrigger&amp;#039;&amp;#039;&amp;#039;, in der Informatik meist nur &amp;#039;&amp;#039;&amp;#039;Trigger&amp;#039;&amp;#039;&amp;#039; genannt ({{enS}} für &amp;#039;&amp;#039;Auslöser&amp;#039;&amp;#039;), ist eine Funktion diverser [[Datenbankmanagementsystem]]e, insbesondere großer relationaler Datenbankmanagementsysteme.&lt;br /&gt;
&lt;br /&gt;
Bei einer bestimmten Art der Änderungen (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;INSERT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;UPDATE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt; bei [[SQL]]) von Daten in einer Tabelle wird ein gespeichertes Programm aufgerufen, das diese Änderung erlaubt, verhindert und/oder weitere Tätigkeiten vornimmt.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
Trigger werden unter anderem zur Wahrung der [[Konsistenz (Datenspeicherung)#Konsistenz in klassischen relationalen Datenbanken|Datenkonsistenz]] (Integritätsüberprüfungen) und zum Einfügen, Löschen oder Ändern von Referenzdaten eingesetzt. Der Trigger wird ausgeführt („gefeuert“), wahlweise bevor die Änderung an der referenzierten Tabelle vorgenommen wird oder danach. Einige [[Relationales Datenbankmanagementsystem|relationale Datenbankmanagementsysteme]] (RDBMS) bieten auch einen „Instead-of-Insert“-Trigger an (englisch für „statt Einfügen“), der es erlaubt, anstelle der INSERT-Operation andere SQL-Anweisungen auszuführen.&lt;br /&gt;
&lt;br /&gt;
Man muss festlegen, ob der Trigger pro verändertem Datensatz oder pro Anweisungsaufruf ausgelöst werden soll. Beispiel: Wenn eine Aktualisierungsanweisung (&amp;lt;code&amp;gt;UPDATE&amp;lt;/code&amp;gt;) 100 Sätze verändert, dann wird im ersten Fall der Trigger 100 Mal aktiviert und im zweiten Fall nur einmal.&lt;br /&gt;
&lt;br /&gt;
Da Trigger selber Datensätze einfügen, ändern und löschen können, kann ein Trigger durch seine Ausführung weitere Trigger auslösen. So kann eine ganze Kette von Verarbeitungen angestoßen werden.&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung von Triggern stellen die verschiedenen RDBMS eingebaute prozedurale [[Programmiersprache]]n wie [[PL/pgSQL]] von [[PostgreSQL]], [[PL/SQL]] (von [[Oracle (Datenbanksystem)|Oracle]]) oder [[SQL PL]] (von [[DB2|IBM DB2]]) zur Verfügung. Bei einigen RDBMS können innerhalb der Trigger-Verarbeitung auch [[Stored Procedure]]s aufgerufen werden. Dadurch ist der Aufruf eines in einer anderen Programmiersprache (C, COBOL, Java) geschriebenen Programms möglich. Bei den hier genannten RDBMS sind Trigger sowohl auf Tabellen, als auch auf [[Sicht (Datenbank)|Sichten]] möglich.&lt;br /&gt;
&lt;br /&gt;
Neben SQL-Standard-Triggern, die vor bzw. nach dem feuernden Ereignis ausgeführt werden, gibt es bei Oracle, IBM DB 2, Microsoft SQL Server und PostgreSQL&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.postgresql.org/docs/current/static/sql-createtrigger.html |titel=PostgreSQL: Documentation: 10: CREATE TRIGGER |sprache=en |abruf=2018-08-11}}&amp;lt;/ref&amp;gt; – nicht beim SQL-Standard – noch die INSTEAD OF-Trigger, die anstelle des feuernden Ereignisses ausgeführt werden. INSTEAD OF-Trigger können auch auf einer View definiert werden.&lt;br /&gt;
&lt;br /&gt;
{{Siehe auch|Ereignis (Programmierung)}}&lt;br /&gt;
&lt;br /&gt;
== Beispiele für Trigger ==&lt;br /&gt;
=== Trigger PL/SQL Syntax ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;psql&amp;quot;&amp;gt;&lt;br /&gt;
   CREATE [OR REPLACE] TRIGGER &amp;lt;trigger_name&amp;gt;&lt;br /&gt;
    {BEFORE|AFTER|INSTEAD OF} {INSERT|DELETE|UPDATE [OF &amp;lt;feld_name&amp;gt;]}&lt;br /&gt;
     ON &amp;lt;table_name&amp;gt;&lt;br /&gt;
      [REFERENCING [NEW AS &amp;lt;new_row_name&amp;gt;] [OLD AS &amp;lt;old_row_name&amp;gt;]]&lt;br /&gt;
        [FOR EACH ROW [WHEN (&amp;lt;trigger_condition&amp;gt;)]]&lt;br /&gt;
        &amp;lt;trigger_body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PL/SQL Code Beispiel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;psql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TRIGGER mitarbeiter_trig_gehalt_biu&lt;br /&gt;
 BEFORE INSERT OR UPDATE OF gehalt ON mitarbeiter&lt;br /&gt;
 FOR EACH ROW&lt;br /&gt;
  -- Triggername mitarbeiter_trig_gehalt_biu&lt;br /&gt;
  -- (_biu steht für B-efore I-nsert U-pdate )&lt;br /&gt;
  -- Tabelle: MITARBEITER&lt;br /&gt;
  -- Trigger soll nur auslösen,&lt;br /&gt;
  -- wenn Gehalt kleiner oder gleich 5000 ist oder neues Gehalt kleiner altes Gehalt&lt;br /&gt;
  -- in der folgenden WHEN-Klausel erfolgt der Zugriff auf :old und :new OHNE das Zeichen :&lt;br /&gt;
 WHEN (new.gehalt &amp;lt;= 5000 or new.gehalt &amp;lt; old.gehalt)&lt;br /&gt;
 DECLARE&lt;br /&gt;
   v_mitarbeiter_name VARCHAR2(255):=null;&lt;br /&gt;
   -- Cursor holt &amp;quot;Name, Vorname&amp;quot; von Mitarbeitertabelle&lt;br /&gt;
   -- Explizite Definition des Cursors hat&lt;br /&gt;
   -- Performance-Vorteile gegen &amp;quot;select into &amp;lt;variable&amp;gt;&amp;quot; im Trigger-Body&lt;br /&gt;
   cursor c_name is select name||&amp;#039;, &amp;#039;||vorname&lt;br /&gt;
                    from mitarbeiter&lt;br /&gt;
                    where mitarbeiternummer = :NEW.MITARBEITERNR;&lt;br /&gt;
 BEGIN&lt;br /&gt;
   -- Mitarbeiter-Name ermitteln und in Variable v_mitarbeiter_name speichern&lt;br /&gt;
   open c_name;&lt;br /&gt;
   fetch c_name into v_mitarbeiter_name;&lt;br /&gt;
   close c_name;&lt;br /&gt;
   -- Bei Gehalt kleiner oder gleich 5000 Exception auslösen&lt;br /&gt;
      --&amp;gt; Fehler wird in der Regel bis zur Anwendung hochgereicht&lt;br /&gt;
   -- Exception-Nr -20000 - -29999 können selbst definiert werden&lt;br /&gt;
   IF :NEW.GEHALT &amp;lt;= 5000 THEN&lt;br /&gt;
     RAISE_APPLICATION_ERROR(&lt;br /&gt;
         -20901,&lt;br /&gt;
         &amp;#039;Managergehalt für Mitarbeiter &amp;#039;||v_mitarbeiter_name||&amp;#039; zu klein!&amp;#039;&lt;br /&gt;
     );&lt;br /&gt;
   END IF;&lt;br /&gt;
   IF :NEW.GEHALT &amp;lt; :OLD.GEHALT THEN&lt;br /&gt;
     RAISE_APPLICATION_ERROR(&lt;br /&gt;
         -20902,&lt;br /&gt;
         &amp;#039;Gehaltskürzung für Mitarbeiter &amp;#039;||v_mitarbeiter_name||&amp;#039; nicht erlaubt!&amp;#039;&lt;br /&gt;
     );&lt;br /&gt;
   END IF;&lt;br /&gt;
 END;&lt;br /&gt;
 /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* H. Faeskorn-Woyke, B. Bertelsmeier, P. Riemer, E. Bauer: &amp;#039;&amp;#039;Datenbanksysteme, Theorie und Praxis mit SQL2003, Oracle und MySQL.&amp;#039;&amp;#039; Pearson-Studium, München/Boston 2007, ISBN 978-3-8273-7266-6.&lt;br /&gt;
* Klaus R. Dittrich, Angelika M. Kotz, Jutta A. Mülle: &amp;#039;&amp;#039;An event/trigger mechanism to enforce complex consistency constraints in design databases.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;ACM SIGMOD.&amp;#039;&amp;#039; 15/3/1986, ACM Press, New York, S. 22–36, {{ISSN|0163-5808}}, [[doi:10.1145/15833.15836]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wiktionary}}&lt;br /&gt;
* [http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/ECMA-Regeln ECMA-Regeln]&lt;br /&gt;
* [http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/INSTEAD-OF-TRIGGER INSTEAD-OF-TRIGGER]&lt;br /&gt;
* [http://www.tsql.de/transact-sql/trigger/trigger.php Trigger] (deutsch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenbanken]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Lómelinde</name></author>
	</entry>
</feed>